OK. Почему бы не сделать несколько простых измерений?
var time : Number;
time = getTimer();
var x:Object = {one: 1, two: 2, three: 3};
for( i = 0; i < 100000; i++ )
{
for (var s:String in x)
{
// lets not trace but do a simple assignment instead.
x[s] = x[s];
}
}
trace( getTimer() - time + "ms");
time = getTimer();
var a:Array = [1, 2, 3];
var len:Number = a.length;
for( i = 0; i < 100000; i++ )
{
for ( var j : Number = 0; j < len; j++)
{
a[j] = a[j];
}
}
trace( getTimer() - time + "ms");
На моей машине итерация массива несколько медленнее. Это может быть связано с тем, что ActionScript 2 не имеет «реальных» массивов, а содержит только ассоциативные массивы (карты). По-видимому, для работы с массивом компилятор должен генерировать некоторые накладные расходы кода. Я не изучал специфику этого, но могу представить, что это может быть так.
КСТАТИ. Выполнение этого теста также может показать, что помещение значения длины массива в переменную на самом деле также не увеличивает производительность. Просто дай ему уйти ....
ОБНОВЛЕНИЕ: Несмотря на то, что ActionScript и JavaScript синтаксически связаны, базовый механизм выполнения совершенно другой. Например. FireFox использует SpiderMonkey , и IE, вероятно, будет использовать реализацию Microsoft, тогда как AS2 выполняется AVM1 от Adobe.