Skip to content

Mejorar el rendimiento de los scripts: Acceso a propiedades de los objetos.

by Pere Monfort on January 16th, 2012

El mini-consejo de hoy está muy relacionado con el explicado anteriormente. Y en general, sirve como ejemplo genérico para que de ahora en adelante, siempre que podáis intentéis “cachear” en variables los accesos a propiedades/métodos de los arrays y objetos.

Pongamos cómo ejemplo el siguiente objeto:

var oObject = {
    subLevel_1 : {
        subLevel_1_1 : "string",
        subLevel_1_2 : ["a", "r", "r", "a", "y"],
        subLevel_1_3 : {"some" : "object"}
    }
};

Si tuviéramos que acceder a una de las propiedades (por ejemplo, subLevel_1_1) del objeto dentro de un bucle, por “comodidad” seguramente haríamos lo siguiente:

var aLevel, oLevel, sLevel, nCount;
 
for (nCount = 0; nCount < 50; nCount += 1) {
    sLevel = oObject.subLevel_1.subLevel_1_1;
    aLevel = oObject.subLevel_1.subLevel_1_2;
    oLevel = oObject.subLevel_1.subLevel_1_3;
}

A cada repetición del bucle, Javascript está accediendo “al vuelo” a la propiedad subLevel_1 y luego a la propiedad subLevel_1_x del objeto, haciendo que esto sea menos óptimo que crear tres nuevas variables y guardar el contenido de los subniveles antes de inicializar el bucle:

var sSubLevel = oObject.subLevel_1.subLevel_1_1;
var aSubLevel = oObject.subLevel_1.subLevel_1_2;
var oSubLevel = oObject.subLevel_1.subLevel_1_3;
 
for (nCount = 0; nCount < 50; nCount += 1) {
    sLevel = sSubLevel;
    aLevel = aSubLevel;
    oLevel = oSubLevel;
}

Como ya dije, es un caso muy parecido al de la propiedad length.

Aquí tenéis el JSPerf de prueba: http://jsperf.com/improving-object-access

No comments yet

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS