【发布时间】:2014-11-07 03:01:27
【问题描述】:
我已经整理了一个 jsperf 测试,该测试比较了在缓存数组长度条件与不缓存的情况下迭代数组的 for 循环。我认为之前缓存变量以避免每次迭代重新计算数组长度会更快,但 jsperf 测试另有说明。有人可以解释这是为什么吗?我还认为在 for 循环的初始化中包含数组长度变量定义(缓存时)会减少时间,因为解析不需要两次查找“var”关键字,但这似乎也不是案例。
没有缓存的例子:
for(var i = 0; i < testArray.length; i++){
//
}
缓存示例
var len = testArray.length;
for(var i = 0; i < len; i++){
//
}
在 for 循环初始化中定义缓存变量的示例
for(var i = 0, len=testArray.length; i < len; i++){
//
}
【问题讨论】:
-
长度实际上不是在访问时计算,它是一个静态值,当数组发生变异时会更新。而今天的引擎可能会优化正常的
for循环。 -
在您的 jsperf 示例中,Console.Log 可能不是循环体中最好的东西。
-
摆脱
console.log:jsperf.com/for-loop-condition-caching/2性能基本一样。正如其他人所说,这可能已经被浏览器优化了。