2011-12-05 22 views
5

¿Qué hay diferencias, los pros o los contras deAS3 {} vs nuevo objeto

var obj = {}; 

VS

var obj = new Object(); 

Todo lo que sé es que el segundo ejemplo toma más tiempo. ¿Hay algún beneficio real?

** ** EDITAR

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(); 

Si cambia entre var b = {}; y var b = new Object(); Vas a ver las diferencias de rendimiento. Son opuestos a lo que recuerdo y lo que mencioné en la pregunta.

Respuesta

3

Que yo sepa, son equivalentes. Con "el segundo ejemplo lleva más tiempo", supongo que solo quiere decir a tiempo el enunciado, y quizás una cantidad de tiempo probablemente inconmensurable para evaluar, pero el tiempo de ejecución debería ser equivalente.

+0

Su respuesta me provocó volver a ejecutar las pruebas de velocidad. Mis hallazgos se publican en una edición de mi pregunta. – Jacksonkr

+0

Volvería a ejecutar su prueba varias veces, aproximadamente 25 veces para cada variación, en procesos completamente nuevos, y luego usaré una hoja de cálculo para rastrear y calcular los promedios. (Simplemente no quiero asegurarme de que no te encuentres con algunos de los mitos comunes en torno a los micro-puntos de referencia). – ziesemer

3

Algunas pruebas me dicen que new Object() es un porcentaje justo más rápido, aunque esto es solo en comparación con la sintaxis {}, no a la abundancia de cualquier otra tarea que desee realizar.

La función de prueba:

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; 
} 

Entonces nuestros dos sujetos de prueba:

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(); 
} 

Y los resultados:

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

No es más o menos un aumento de velocidad del 45% usando new Object(), pero notarás que el tiempo total aún no se nota (incluso para 1,000,000 de iteraciones) .

Personalmente, seguiré con la sintaxis {} por simplicidad y orden, entre otras razones de preferencia personal.