好的。为什么不做一些简单的测量?
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 由 Adobe 的 AVM1 执行。