非常によく似たテストを試しましたが、200k 要素を 1 回だけ繰り返したところ、反対の結果になりました。
Task build-arr: 2221ms
Task iter-arr: 516ms
Task build-obj: 1410ms
Task iter-obj: 953ms
Luke のテストはループ オーバーヘッドに支配されているのではないかと思います。また、最初に配列を作成するのにかなり長い時間がかかることに注意してください。そのため、タスクが挿入が多い場合は ymmv.
また、私のテストでは、arr.length をローカル変数に格納すると、測定可能なパフォーマンスが約 15% 向上しました。
アップデート:
ご要望にお応えして、私が使用したコードを掲載します。
var iter:Number = 200000;
var time:Number = 0;
var obj:Object = {};
var arr:Array = [];
time = getTimer();
for (var i:Number = 0; i < iter; ++i) {
arr[i] = i;
}
trace("Task build-arr: " + (getTimer() - time) + "ms");
time = getTimer();
for (var i:Number = 0; i < iter; ++i) {
arr[i] = arr[i];
}
trace("Task iter-arr: " + (getTimer() - time) + "ms");
time = getTimer();
for (var i:Number = 0; i < iter; ++i) {
obj[String(i)] = i;
}
trace("Task build-obj: " + (getTimer() - time) + "ms");
time = getTimer();
for (var i:String in obj) {
obj[i] = obj[i];
}
trace("Task iter-obj: " + (getTimer() - time) + "ms");