La longitud de una matriz real no se calcula sobre la marcha. Se almacena como parte de la estructura de datos de la matriz, por lo que acceder a ella no implica más trabajo que simplemente obtener el valor (no hay cómputo). Como tal, generalmente será tan rápido como recuperar cualquier propiedad fija de un objeto. Como se puede ver en esta prueba de rendimiento, prácticamente no hay diferencia entre la recuperación de la longitud de una matriz y la recuperación de una propiedad de un objeto:
http://jsperf.com/length-comparisons
Una excepción a esto se opone la lista de nodos que los DOM retornos desde funciones como getElementsByTagName()
o getElementsByClassName()
. En estos, a menudo es mucho más lento acceder a la propiedad de longitud. Esto es probablemente debido a que estos objetos nodeList no son verdaderos objetos javascript y puede haber un puente entre Javascript y código nativo que debe cruzarse cada vez que se accede a algo desde estos objetos. En este caso, sería MUCHO más rápido (10-100x más rápido) almacenar en caché la longitud en una variable local en lugar de usarla repetidamente en un bucle fuera de la lista de nodos. Lo agregué a la comparación de tallas y puede ver cuánto más lento es.
En algunos navegadores, es significativamente más rápido poner la longitud en una variable local y usarla desde allí si se va a referir a ella una y otra vez (como en un bucle). Aquí está el gráfico de rendimiento de la prueba jsperf arriba:

No hay 'length' ** ** método en una función de JavaScript objetos, pero el acceso a la propiedad objeto es a menudo más lento que acceder variable local. – kirilloid
Si la diferencia entre el mal funcionamiento de su página y su rendimiento es aceptable es unas pocas referencias a ".length" en las instancias de arreglos, entonces ciertamente tiene algunos problemas mucho más importantes que resolver. – Pointy
¿Por qué eso @Pointly? ¿No puedo buscar todas las mejoras en mi código? ¿No puedo ser curioso? – santiagobasulto