Mejorar el rendimiento de los scripts: Acceso a propiedades de los objetos.
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