2010-09-29 26 views
8

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

y

document.getElementsByTagName('a')[0]

devolverá el mismo resultado ...

es el ex más rápido que el segundo?

+0

Eso no es una matriz. – SLaks

+0

No importa el resultado, no importa. Si está utilizando Javascript (en un navegador web) para el rendimiento, está utilizando el idioma equivocado. Debería enfocarse en otra consideración, como la legibilidad. – HoLyVieR

+0

@HoLyVieR solo una pregunta que fue provocada por una publicación de blog. Me gustaría imaginar que la diferencia es mínima. – xandercoded

Respuesta

5

Selfmade prueba de rendimiento: http://jsfiddle.net/438jh/2/

La diferencia parece ser insignificante. El segundo método funciona mejor en la mayoría de los casos, pero si observas con qué frecuencia se realiza el ciclo, realmente no importa.

Chrome:

  1. método: ~ 260ms
  2. método: ~ 170 ms
+0

Al probar su jsFiddle en Firefox 3.6.6, obtengo aproximadamente 250 para el primer método y 475 para el segundo. –

+0

resultados en ie8: test1: 5000+ test2: ~ 2000. Incluso tengo que marcar "no" cuando IE me pide que deje de ejecutar secuencias de comandos durante la prueba 2 y aún es significativamente más rápido. – lincolnk

+0

@Daniel: en Firefox 3.6.8. Obtengo ~ 640 y ~ 460 .... –

0

función elemento es un miembro de NodeList objeto DOM. NodeLists son similares a una matriz, pero no son matrices reales (por ejemplo, son en vivo, de solo lectura, sin funciones de matriz).

La diferencia de rendimiento debe ser insignificante.

+0

Yeap, leo esto antes de publicar ... http://www.nczonline.net/blog/2010/09/28/why-is-getelementsbytagname-faster-hat- queryselectorall/ – xandercoded

+1

sugiero que se concentre en optimizaciones más importantes. – galambalazs

0

Para un ejemplo más práctico, esta técnica tiene el mejor rendimiento. ¡Mira el trabajo de Nicholas Zakas, YAHOO! para obtener más ejemplos:

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