as3 {} против нового объекта - PullRequest
5 голосов
/ 05 декабря 2011

В чем отличия, плюсы и минусы

var obj = {};

VS

var obj = new Object();

Все, что я знаю, это то, что второй пример занимает больше времени. Есть ли реальная выгода?

** РЕДАКТИРОВАТЬ **

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

Если вы переключитесь между var b = {}; и var b = new Object();, вы увидите разницу в производительности. Они противоположны моему воспоминанию и тому, что я упомянул в вопросе.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Некоторые тесты говорят мне, что new Object() - это довольно быстрый процент, хотя это только по сравнению с синтаксисом {}, а не с избытком других задач, которые вы, возможно, захотите выполнить.

Функция тестирования:

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

Затем два наших испытуемых:

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

И результаты:

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

Увеличение скорости примерно на 45% при использовании new Object(), но вы заметите, что общее время все еще незаметно (даже для 1 000 000 итераций).

Лично я все еще буду придерживаться синтаксиса {} для простоты и аккуратности среди других личных предпочтенийпричины.

3 голосов
/ 05 декабря 2011

Насколько я знаю, они эквивалентны. «Второй пример занимает больше времени», я предполагаю, что вы имеете в виду только время для ввода оператора и, возможно, неизмеримое количество времени для оценки, но время выполнения должно быть эквивалентным.

...