2011-12-05 19 views
5

Qual è la differenza, pro o contro diAS3 {} vs new Object

var obj = {}; 

VS

var obj = new Object(); 

Tutto quello che so è che il secondo esempio richiede più tempo. C'è qualche vantaggio reale?

** EDIT **

function loop() { 
    var start = (new Date()).getTime(); 
    for(var i = 0; i < 1000000; ++i) { 
     //var b = {}; // takes ~548ms on my machine 
     var b = new Object(); // takes ~287ms on my machine 
    } 
    trace((new Date()).getTime() - start); 
    setTimeout(loop, 1); 
} 
loop(); 

Se si passa da var b = {}; e var b = new Object(); Vedrete le differenze di prestazioni. Sono opposti rispetto al mio ricordo e a ciò che ho menzionato nella domanda.

risposta

3

Per quanto ne so, sono equivalenti. Con "il secondo esempio richiede più tempo", presumo tu intenda solo in tempo per digitare la dichiarazione, e forse una quantità probabilmente incommensurabile di tempo per valutare - ma il tempo di esecuzione dovrebbe essere equivalente.

+0

La tua risposta mi ha spinto a ripetere i test di velocità. I miei risultati sono pubblicati in un EDIT alla mia domanda. – Jacksonkr

+0

Ripetere più volte il test, circa 25 volte per ogni variazione, in processi completamente nuovi, quindi utilizzare un foglio di calcolo per tracciare e calcolare le medie. (Semplicemente non voglio essere sicuro di non imbatterti in alcuni dei miti comuni sui micro-benchmark). – ziesemer

3

Alcuni test mi dicono che new Object() è una percentuale equa più veloce, anche se questo è solo in confronto alla sintassi {}, non all'abbondanza di altre attività che potresti voler fare.

La funzione di test:

function time(amount:int, test:Function):Number 
{ 
    var average:Number = 0; 
    var averages:Array = []; 

    for(var n:int = 0; n<amount; n++) 
    { 
     var start:Number = getTimer(); 

     test(); 

     averages[averages.length] = getTimer() - start; 
    } 

    for each(var a:Number in averages) average += a; 

    return average/averages.length; 
} 

Allora i nostri due soggetti di prova:

function short():void 
{ 
    for(var i:int = 0; i<1000000; i++) var obj:Object = {}; 
} 

function long():void 
{ 
    for(var i:int = 0; i<1000000; i++) var obj:Object = new Object(); 
} 

E i risultati:

trace(time(5, short)); // 278.6 
trace(time(5, long)); // 153.6 

C'è circa un aumento di velocità del 45% utilizzando new Object(), ma noterai che il tempo totale è ancora impercettibile (anche per 1.000.000 di iterazioni) .

Personalmente, continuerò ad attenermi alla sintassi {} per semplicità e ordine, tra gli altri motivi di preferenza personale.