为什么这两个反向循环之间存在性能差异?

时间:2014-01-12 18:26:40

标签: javascript for-loop

Benchmarks

注意:要在该基准测试套件上仅运行以下两项测试,请点击Basic reverse for loopFalsy reverse for loop

下面列出的操作/秒在Chrome 32,Win 7 64位上。


此循环

for (var i=a.length - 1; i >= 0; i--) { }  // 1,161,089 ops/sec

快得多
for (var i=a.length; i--;) { }  // 870,837 ops/sec

在Chrome 32,Firefox 27和Opera 12& 19.它们在IE(5 - 11)中大致相同,而且在Safari Windows(5.1.7)中,虚假循环实际上更快。这似乎与循环条件为假的没有任何关系 - 该套件中有另一个基准用于该比较。

“基本”循环比Chrome 32,Win 7 64位上的“虚假”循环快约33%。为什么呢?

1 个答案:

答案 0 :(得分:0)

第二个循环:for (var i=a.length; i--;) { }迭代直到i--返回false,因为该部分是在循环的条件部分写入的。 i--将返回false,因此两个循环的功能相同。

然而,第二个循环导致额外的任务:将a.length和0之间的每个值转换为布尔值,这比整数比较更耗时。