2012-02-01 8 views

risposta

21

La differenza è nel meccanismo di ricerca: se si utilizza la sintassi del punto, il compilatore saprà al momento della compilazione che si sta accedendo a una proprietà di tale oggetto. Se si utilizza la sintassi della parentesi, la ricerca effettiva della proprietà viene eseguita in fase di esecuzione e ci sarà bisogno di più controllo del tipo - dopo tutto, si potrebbe comporre la stringa chiave in modo dinamico, il valore potrebbe cambiare, o si potrebbe anche chiamare una funzione invece di una variabile, ecc.

Il risultato è una differenza significativa nelle prestazioni: La sintassi del bracketing impiega circa tre volte il tempo necessario per eseguire la sintassi del punto.

Ecco un test po 'di velocità per illustrare il mio 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)); 

Se i due erano la stessa cosa, tranne che per la notazione, dovrebbero prendere esattamente la stessa quantità di tempo. Ma come puoi vedere, non è questo il caso. Sulla mia macchina:

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

grazie, bella copertina –

+2

Punto bonus per benchmark! –

Problemi correlati