as3 {} против нового объекта
В чем различия, плюсы или минусы
var obj = {};
В.С.
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 ответа
Насколько я знаю, они эквивалентны. "Второй пример занимает больше времени", я предполагаю, что вы имеете в виду только время для ввода оператора и, возможно, неизмеримое количество времени для оценки, но время выполнения должно быть эквивалентным.
Некоторое тестирование говорит мне, что 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 итераций).
Лично я все еще буду придерживаться {}
синтаксис для простоты и аккуратности среди других личных предпочтений причин.