作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
哪个更快?为什么?
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) {
// ...
}
最佳答案
从我坐的地方,普通 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");
for test: 124ms
for reversed test: 110ms
for each test: 261ms
for
循环现在具有隐式类型转换。为了避免这种情况,我将作业排除在循环之外。for
中添加额外 Actor 是可以的。循环,因为无论如何“真正的代码”都需要它,但对我来说,这只是另一种说法“没有通用的答案;哪个循环更快取决于你在循环中做什么”。这就是我给你的答案。 ;) 关于performance - 对于 VS Foreach on Array 性能(在 AS3/Flex 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010859/
我是一名优秀的程序员,十分优秀!