2010-09-29 25 views
8

document.getElementsByTagName('a').item(0)list.item (0) सूची बनाम [0]

और

document.getElementsByTagName('a')[0]

ही परिणाम वापस आ जाएगी ...

उत्तरार्द्ध से पूर्व तेजी से है?

+0

यह कोई सरणी नहीं है। – SLaks

+0

कोई परिणाम नहीं मिला, यह नहीं मिलेगा। यदि आप प्रदर्शन के लिए जावास्क्रिप्ट (वेब ​​ब्राउज़र पर) का उपयोग कर रहे हैं तो आप गलत भाषा का उपयोग कर रहे हैं। आपको पठनीयता जैसे अन्य विचारों पर ध्यान देना चाहिए। – HoLyVieR

+0

@ होलीवीर सिर्फ एक प्रश्न है जो एक ब्लॉग पोस्ट द्वारा चकित किया गया था। मुझे लगता है कि अंतर कम है। – xandercoded

उत्तर

5

selfmade प्रदर्शन परीक्षण: http://jsfiddle.net/438jh/2/

अंतर नगण्य हो रहा है। दूसरी विधि ज्यादातर मामलों में बेहतर प्रदर्शन करती है, लेकिन यदि आप देखते हैं कि लूप कितनी बार किया जाता है तो इससे कोई फर्क नहीं पड़ता।

क्रोम:

  1. विधि: ~ 260ms
  2. विधि: ~ 170ms
+0

फ़ायरफ़ॉक्स 3.6.6 में अपने जेएसफ़ाइल को आजमाएं, मुझे पहली विधि के लिए लगभग 250 और दूसरे के लिए 475 मिलते हैं। –

+0

परिणाम 8 में: test1: 5000+ test2: ~ 2000। मुझे टेस्ट 2 के दौरान स्क्रिप्ट चलाने से रोकने के लिए कहा जाता है जब भी मुझे "नहीं" पेंच करना पड़ता है और यह अभी भी काफी तेज़ है। – lincolnk

+0

@ डैनियल: फ़ायरफ़ॉक्स 3.6.8 में। मुझे ~ 640 और ~ 460 मिलते हैं .... –

0

आइटम समारोह NodeList डोम वस्तु का एक सदस्य है। NodeLists सरणी की तरह हैं लेकिन वे असली सरणी नहीं हैं (उदा .: वे रहते हैं, केवल पढ़ने के लिए, सरणी कार्यों की कमी)।

प्रदर्शन अंतर नगण्य होना चाहिए।

+0

हाँ, मैंने पोस्ट करने से पहले इसे पढ़ा ... http://www.nczonline.net/blog/2010/09/28/why-is-getelementsbytagname-faster-that- queryselectorall/ – xandercoded

+1

मेरा सुझाव है कि आप अधिक महत्वपूर्ण अनुकूलन पर ध्यान केंद्रित करें। – galambalazs

0

अधिक व्यावहारिक उदाहरण के लिए, इस तकनीक का सर्वोत्तम प्रदर्शन है। निकोलस जाकास, याहू द्वारा काम पर देखो! अधिक उदाहरणों के लिए:

var cachedDOMquery = Array.prototype.slice.apply(document.getElementsByTagName('a')), 
i = cachedDOMquery.length, 
item; 
while(i--){ 
    item = cachedDOMquery[i]; 
    alert(item.href); 
} 
संबंधित मुद्दे