2010-11-22 6 views
5

मैं डेटा विज़ुअलाइजेशन बना रहा हूं, और प्रतिपादन प्रदर्शन महत्वपूर्ण है। मेरा प्रश्न बोग-मानक एचटीएमएल के लिए प्रासंगिक होगा, हालांकि मैं जावास्क्रिप्ट के साथ एसवीजी का उपयोग कर रहा हूं।प्रदर्शन प्रस्तुत करना: शैली विशेषताओं या वर्गनाम और स्टाइलशीट नियम?

ठीक है, एक काल्पनिक परिदृश्य: कहते हैं कि मैं "red" का एक background-color के साथ 10,000 डोम नोड्स, और "green" का एक background-color के साथ 10,000 डोम नोड्स की है। प्रत्येक नोड एक जावास्क्रिप्ट पाश द्वारा बनाया गया है। मैं कर सकता या तो:

  1. प्रत्येक नोड पर एक style विशेषता सेट करें, नोड के background-color को निर्दिष्ट: <element style="background-color:red;"/>
  2. प्रत्येक नोड पर एक class विशेषता सेट करें और फिर एक इनलाइन शैली या बाहरी शैलीपत्रक में उस वर्ग को संदर्भित :

    <head><style>.foo {background-color:red;}</style></head>

    <body><element class="foo"/></body>

का प्रदर्शन डाउनलोड करना यहां कोड बिल्कुल महत्वपूर्ण नहीं है - मुझे केवल ब्राउज़र के प्रतिपादन प्रदर्शन में रूचि है। मुझे यह भी पता है कि स्टाइल गुण आमतौर पर वेबसाइट के विकास में इतनी उपयोगी या अर्थपूर्ण नहीं होते हैं, लेकिन मेरे यहां एक विशिष्ट उपयोग केस है।

मैं हूँ तार्किक जवाब में रुचि रखते हैं, लेकिन यह वास्तव में वास्तव में इस परीक्षण या (मैं जानकारी के लिए खोज की है, लेकिन विशेष रूप से इस पर कुछ भी नहीं पाया जाता है) किसी और के परीक्षण के बारे में पढ़ा है किसी से सुनने के लिए उपयोगी होगा।

आपकी मदद के लिए धन्यवाद!

+0

आप अपना खुद का बेंचमार्क क्यों नहीं करते? मुझे संदेह है कि प्रदर्शन विभिन्न ब्राउज़रों के बीच काफी भिन्न होगा ... –

+0

मुझे लगता है कि यह एक बहुत ही विशिष्ट मामला है और इसे अपने आप को विभिन्न ब्राउज़रों में बेंचमार्क करना बहुत आसान है। मेरी शर्त यह है कि यह ज्यादा अलग नहीं होगा, लेकिन कौन जानता है। – Athari

+0

मेरा अनुमान है कि 'स्टाइल' समाधान सबसे तेज़ काम करता है, लेकिन मैं पता लगाने के लिए एक असली दुनिया बेंचमार्क करूँगा। ऐसा करना मुश्किल नहीं होना चाहिए, केवल 10,000 मॉक ऑब्जेक्ट्स बनाएं –

उत्तर

2

मैं इस के लिए एक प्रदर्शन बेंचमार्क बना लिया है: http://jsperf.com/style-element-vs-attr

फ़ायरफ़ॉक्स और क्रोम में प्रारंभिक परीक्षण से, ऐसा लगता है कि यह के रूप में बना सकते हैं और तत्वों है कि classnames का उपयोग रेंडर करने के लिए तेजी से चारों ओर तीन बार है की तरह है, बल्कि शैली विशेषताओं की तुलना में । मैं उस से काफी हैरान था - मुझे यकीन नहीं था, लेकिन विपरीत की उम्मीद थी।

+0

मैं उन आंकड़ों को नमक के चुटकी से ले जाऊंगा, क्योंकि यह ग्राफिक को प्रस्तुत करने के समय के बजाए जावास्क्रिप्ट इंजन को पूरा करने के समय को मापने का समय ही माप रहा है। ब्राउज़र्स आम तौर पर वेंडरिंग फ्रेम को थ्रॉटल करेंगे। इसलिए, भले ही जेएसपीएआरएफ एक लाख संचालन की रिपोर्ट कर सके, फिर भी ब्राउज़र प्रति सेकेंड 60 फ्रेम से अधिक तेज़ नहीं हो सकता है। दूसरे शब्दों में, ब्राउज़र ग्राफिक रूप से बहुत कुछ चल रहा है, तो उन्हें प्रस्तुत करने के बजाय, तेज़ी से होने वाली घटनाओं को त्याग देगा, क्योंकि उपयोगकर्ता वैसे भी ध्यान नहीं देगा। यह सब ग्राफिकल प्रतिपादन पर perf परिणामों की सार्थकता को प्रभावित करता है। –

+0

यह एक बहुत ही उचित बिंदु है। – Premasagar

+0

मेरे परीक्षणों में, ब्राउज़र प्रोफाइलर्स का उपयोग करके, परिणाम 5000 संचालन में नगण्य थे, हालांकि आईई और क्रोम का उपयोग करते हुए, विशेषता को सीधे सेट करना शैली (जो अंतर्ज्ञानी है) का उपयोग करने से थोड़ा तेज़ हो सकता है। यह एक अवैज्ञानिक और अनिश्चित परीक्षण था, लेकिन मैं इसके साथ जा रहा हूं। –

2

यदि कोई महत्वपूर्ण अंतर होता है तो मुझे आश्चर्य होगा (और अगर यह कभी भी परिपक्व हो तो भी आश्चर्यचकित होगा) लेकिन यदि कोई था तो यह आईई में इतना बेंच होगा।

यह कहा गया है कि आप जिन परिस्थितियों का परीक्षण कर रहे हैं वे इतने बढ़ते मामले हैं कि मुझे नहीं लगता कि आपको इनलाइन की गति में एक छोटे-से-कम महत्वहीन प्रदर्शन लाभ प्राप्त करने के लिए अपने मार्कअप का दुरुपयोग करना चाहिए। कक्षा आधारित सीएसएस विकास और रखरखाव और अर्थशास्त्र के प्रयोजनों के लिए बेहतर रूप से बेहतर है और आपको हर कीमत पर इनलाइन शैलियों से बचना चाहिए।

+0

यदि कई नोड्स हैं तो मैं 'कक्षा' के साथ जाऊंगा। इस मामले के लिए मेमोरी उपयोग कम होना चाहिए, जो आमतौर पर एक अच्छी बात है। –

+0

@Erik:/concur - मैं किसी भी कारण से नहीं सोच सकता कि शैली बेहतर क्यों होगी और कई क्यों बदतर हैं। – annakata

0

यदि आप कहते हैं, प्रत्येक नोड जावास्क्रिप्ट लूप के भीतर बनाया गया है, तो क्या यह पहले से ही ब्राउज़र प्रदर्शन (जावास्क्रिप्ट इंजन) पर मांग नहीं कर रहा है?

किसी भी तरह, मैं जावास्क्रिप्ट के माध्यम से रंगों को सेट करने में थोड़ा अधिक आरामदायक होगा। कहें, $(this).css('color','red'); एक वर्ग जोड़ने के बजाय, जिसके बाद ब्राउज़र को स्क्रिप्ट चलने के समय उपलब्ध गणना की गई शैलियों को देखने के लिए और फिर रंग परिवर्तन को प्रस्तुत/पुनः प्रस्तुत करने की आवश्यकता होती है।

मुझे यकीन नहीं है कि मैं पूरी तरह से सही हूं, सिर्फ एक राय।

0

परिणाम की तुलना के बाद, मैं सीएसएस-इन-जे एस समाधान का उपयोग करने के लिए रह सकते हैं, मैं कई की कोशिश की है, और अंत में इस lib का उपयोग कर:

https://github.com/cssobj/cssobj

यह बना सकते हैं और से अद्यतन सीएसएस नियम है जेएस, और यह आकार में छोटा है।

संबंधित मुद्दे