2010-09-29 7 views
8

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

et

document.getElementsByTagName('a')[0]

sera le même résultat ...

est l'ancien plus rapide que celui-ci?

+0

Ce n'est pas un tableau. – SLaks

+0

Peu importe le résultat, il ne sera pas mater. Si vous utilisez JavaScript (sur un navigateur Web) pour la performance, vous utilisez la mauvaise langue. Vous devriez vous concentrer sur d'autres considérations, telles que la lisibilité. – HoLyVieR

+0

@HoLyVieR juste une question qui a été déclenchée par un billet de blog. Je pense que la différence est minime. – xandercoded

Répondre

5

test de performance Selfmade: http://jsfiddle.net/438jh/2/

La différence semble être négligeable. La deuxième méthode fonctionne mieux dans la plupart des cas, mais si vous regardez la fréquence d'exécution de la boucle, cela n'a pas vraiment d'importance. Procédé

  1. ::

    Chrome ~ 260ms

  2. méthode
  3. : ~ 170ms
+0

Essayer votre jsFiddle dans Firefox 3.6.6, je reçois environ 250 pour la première méthode et 475 pour la seconde. –

+0

résulte en ie8: test1: 5000+ test2: ~ 2000. J'ai même besoin de pointer "non" quand IE me demande d'arrêter de lancer des scripts pendant le test 2 et c'est quand même beaucoup plus rapide. – lincolnk

+0

@Daniel: dans Firefox 3.6.8. Je reçois ~ 640 et ~ 460 .... –

0

fonction d'élément est un élément de NodeList objet DOM. NodeLists sont de type tableau mais ne sont pas de véritables tableaux (par exemple: ils sont en direct, en lecture seule, manque de fonctions de tableau).

La différence de performance devrait être négligeable.

+0

Yeap, j'ai lu ceci avant de poster ... http://www.nczonline.net/blog/2010/09/28/why-is-getelementsbytagname-faster-that- queryselectorall/ – xandercoded

+1

Je suggère que vous vous concentriez sur des optimisations plus importantes. – galambalazs

0

Pour un exemple plus pratique, cette technique a les meilleures performances. Regardez le travail de Nicholas Zakas, YAHOO! pour plus d'exemples:

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