Se supone sintácticamente que se realiza el acceso a propiedades de objeto y elementos de matriz en JavaScript en constant time: O (1). Las características de rendimiento no están garantizadas en la especificación ECMAScript, pero todos los motores modernos de JavaScript recuperan propiedades de objetos en tiempo constante.
Aquí está un ejemplo simple que muestra cómo crecen los tiempos de acceso cuando el contenedor está tiempos x1000 más grandes:
var largeObject = {};
var smallObject = {};
var x, i;
for (i = 0; i < 1000000; i++) {
largeObject['a' + i] = i;
}
for (i = 0; i < 1000; i++) {
smallObject['b' + i] = i;
}
console.time('10k Accesses from largeObject');
for (i = 0; i < 10000; i++) x = largeObject['a' + (i % 1000000)];
console.timeEnd('10k Accesses from largeObject');
console.time('10k Accesses from smallObject');
for (i = 0; i < 10000; i++) x = largeObject['a' + (i % 1000)];
console.timeEnd('10k Accesses from smallObject');
Resultados en Firebug, Firefox 3.6.10 (Mac OS X 10.6.4 - 2,93 GHz Intel Core 2 Duo):
10k Accesses from largeObject: 22ms
10k Accesses from smallObject: 19ms
resultados en Chrome 6.0.472 Herramientas de desarrollo:
10k Accesses from largeObject: 15ms
10k Accesses from smallObject: 15ms
Internet Expl ORER 8.0.7600 con Firebug Lite en Windows 7
10k Accesses from largeObject: 250ms
10k Accesses from smallObject: 219ms
Nada es "seguro" (a menos que, como ocurre con C++, la norma define las características de funcionamiento de los contenedores?) pero puedo garantizar que ningún navegador utiliza una búsqueda lineal . Existe una competencia masiva para que los navegadores superen a los demás en los puntos de referencia de JS en estos días; puede estar seguro de que indexar una matriz será tan rápido como pueda hacerlo el fabricante del navegador. – meagar