2012-02-01 9 views

Respuesta

21

La diferencia está en el mecanismo de búsqueda: si utiliza la sintaxis de punto, el compilador sabrá en tiempo de compilación que está accediendo a una propiedad de ese objeto. Si utiliza la sintaxis del paréntesis, la búsqueda real de la propiedad se realiza en tiempo de ejecución, y tendrá que haber más comprobaciones de tipos; después de todo, podría componer la cadena clave de forma dinámica, el valor podría cambiar, o incluso podría estar llamando una función en lugar de una variable, etc.

El resultado es una diferencia significativa en el rendimiento: La sintaxis del soporte requiere aproximadamente tres veces más tiempo para ejecutarse como sintaxis de punto.

He aquí una pequeña prueba de velocidad para ilustrar mi punto:

var start : int = getTimer(); 

var obj:Object = { something : "something" }; 

for (var i : int = 0; i < 100000000; i++) { 
    var n:String = obj.something; 
} 

trace ("Time with dot syntax: "+(getTimer() - start)); 

start = getTimer(); 

for (i = 0; i < 100000000; i++) { 
    var o:String = obj["something"]; 
} 

trace ("Time with bracket syntax: "+(getTimer() - start)); 

Si los dos eran el mismo, a excepción de la notación, deben tener exactamente la misma cantidad de tiempo. Pero como pueden ver, este no es el caso. En mi máquina:

Time with dot syntax:  3937 
Time with bracket syntax: 9857 
+0

gracias, tapa agradable –

+2

Punto de bonificación para el punto de referencia! –

Cuestiones relacionadas