2010-05-29 23 views
12

En Javascript, cuando se obtiene una propiedad de un objeto, ¿hay una penalización de rendimiento para obtener el objeto completo frente a solo obtener una propiedad de ese objeto?javascript acceso de objeto rendimiento

También tenga en cuenta que no estoy hablando de acceso DOM estos son objetos JavaScript simples.

Por ejemplo:

¿Existe algún tipo de diferencia de rendimiento entre el siguiente código:

supone que es más rápido, pero no estoy seguro:

var length = some.object[key].length; 

if(length === condition){ 
    // Do something that doesnt need anything inside of some.object[key] 
} 
else{ 
    var object = some.object[key]; 
    // Do something that requires stuff inside of some.object[key] 
} 

Creo que esto sería más lento, pero no seguro si es importante

var object = some.object[key]; 

if(object.length === condition){ 
    // Do something that doesnt need anything inside of some.object[key] 
} 
else{ 
    // Do something that requires stuff inside of some.object[key] 
} 

Respuesta

15

Sí, hay una penalización de rendimiento.

Cuanto más profunda es una propiedad anidada, se necesitará más tiempo para realizar la búsqueda de propiedades.

Compruebe esto free chapter del libro High Performance JavaScript, en la página 31, habla específicamente sobre los miembros anidados.

(Tiempo de acceso relacionada con la profundidad propiedad)

Véase también esta prueba de rendimiento:

+1

enlace está muerto y no podía ser actualizado con más reciente navegadores? – caub

+0

este enlace debería funcionar. https://www.nczonline.net/experiments/javascript/performance/data-access.html – kimsk

Cuestiones relacionadas