osh*_*hko 16 apache-flex flash performance actionscript actionscript-3
哪一个更快?为什么?
var messages:Array = [.....]
// 1 - for
var len:int = messages.length;
for (var i:int = 0; i < len; i++) {
var o:Object = messages[i];
// ...
}
// 2 - foreach
for each (var o:Object in messages) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
fen*_*mas 23
从我所在的位置开始,在最小的情况下,常规for
循环比for each
循环快一些.此外,与AS2日一样,减少for
循环通常会提供非常小的改进.
但实际上,这里的任何细微差别都会与您在循环中实际执行的操作的要求相比相形见绌.在任何一种情况下,您都可以找到更快或更慢的操作.真正的答案是,没有任何一种循环可以被认为比另一种循环更快 - 您必须在应用程序中显示您的代码.
示例代码:
var size:Number = 10000000;
var arr:Array = [];
for (var i:int=0; i<size; i++) { arr[i] = i; }
var time:Number, o:Object;
// for()
time = getTimer();
for (i=0; i<size; i++) { arr[i]; }
trace("for test: "+(getTimer()-time)+"ms");
// for() reversed
time = getTimer();
for (i=size-1; i>=0; i--) { arr[i]; }
trace("for reversed test: "+(getTimer()-time)+"ms");
// for..in
time = getTimer();
for each(o in arr) { o; }
trace("for each test: "+(getTimer()-time)+"ms");
Run Code Online (Sandbox Code Playgroud)
结果:
for test: 124ms
for reversed test: 110ms
for each test: 261ms
Run Code Online (Sandbox Code Playgroud)
编辑:为了改进比较,我更改了内部循环,因此除了访问集合值之外什么都不做.
编辑2:oshyshko评论的答案:
for
循环现在具有隐式类型转换.为了避免这种情况,我从循环中离开了作业.当然有人可能会认为在for
循环中有额外的演员是可以的,因为"真正的代码"无论如何都需要它,但对我来说这只是另一种说法"没有一般答案;哪个循环更快取决于你做什么在你的循环内".这是我给你的答案.;)