2010-09-29 12 views
8

document.getElementsByTagName('a').item(0)list.item (0) vs Liste [0]

und

document.getElementsByTagName('a')[0]

wird das gleiche Ergebnis zurück ...

ist der ehemalige schneller als die letzteren?

+0

Das ist kein Array. – SLaks

+0

Kein Ergebnis, wird es nicht. Wenn Sie Javascript (in einem Webbrowser) für die Leistung verwenden, verwenden Sie die falsche Sprache. Sie sollten sich auf andere Überlegungen wie die Lesbarkeit konzentrieren. – HoLyVieR

+0

@HoLyVieR nur eine Frage, die von einem Blogpost ausgelöst wurde. Ich denke, der Unterschied ist minimal. – xandercoded

Antwort

5

Eigenbau Performance-Test: http://jsfiddle.net/438jh/2/

Der Unterschied scheint unbedeutend zu sein. Die zweite Methode funktioniert in den meisten Fällen besser, aber wenn Sie sich ansehen, wie oft die Schleife ausgeführt wird, spielt das keine Rolle.

Chrome:

  1. Methode: ~ 260 ms
  2. Methode: ~ 170ms
+0

Probieren Sie Ihre jsFiddle in Firefox 3.6.6, bekomme ich etwa 250 für die erste Methode und 475 für die zweite. –

+0

ergibt ie8: test1: 5000+ test2: ~ 2000. Ich muss sogar "Nein" aussprechen, wenn der IE mich auffordert, während Test 2 mit dem Ausführen von Skripts aufzuhören, und es ist immer noch deutlich schneller. – lincolnk

+0

@Daniel: in Firefox 3.6.8. Ich bekomme ~ 640 und ~ 460 .... –

0

Element Funktion ist Teil des NodeList DOM-Objekt. NodeLists sind Array-artig, aber sie sind keine echten Arrays (z. B. sind sie live, schreibgeschützt, fehlende Array-Funktionen).

Der Leistungsunterschied sollte vernachlässigbar sein.

+0

Yeap, ich lese das vor dem Posten ... http://www.nczonline.net/blog/2010/09/28/why-is-getelementsbytagname-faster-that- queryselectorall/ – xandercoded

+1

Ich schlage vor, dass Sie sich auf wichtigere Optimierungen konzentrieren. – galambalazs

0

Für ein praktischeres Beispiel hat diese Technik die beste Leistung. Sieh dir die Arbeit von Nicholas Zakas, YAHOO an! für weitere Beispiele:

var cachedDOMquery = Array.prototype.slice.apply(document.getElementsByTagName('a')), 
i = cachedDOMquery.length, 
item; 
while(i--){ 
    item = cachedDOMquery[i]; 
    alert(item.href); 
}