这话我听过好几次了。JavaScript循环在向后计数时真的更快吗?如果有,为什么?我已经看到了一些测试套件示例,它们显示反向循环更快,但我找不到任何解释!
我假设这是因为循环不再需要在每次检查属性时评估它是否已经完成,它只检查最终的数值。
即。
for (var i = count - 1; i >= 0; i--)
{
// count is only evaluated once and then the comparison is always on 0.
}
这话我听过好几次了。JavaScript循环在向后计数时真的更快吗?如果有,为什么?我已经看到了一些测试套件示例,它们显示反向循环更快,但我找不到任何解释!
我假设这是因为循环不再需要在每次检查属性时评估它是否已经完成,它只检查最终的数值。
即。
for (var i = count - 1; i >= 0; i--)
{
// count is only evaluated once and then the comparison is always on 0.
}
当前回答
你现在做的方式不是更快(除了它是一个无限循环,我猜你的意思是做I——。
如果你想让它更快,请:
for (i = 10; i--;) {
//super fast loop
}
当然,在这么小的循环中你不会注意到它。它更快的原因是因为你在检查i是否为“真”时递减i(当它达到0时,它的计算结果为“假”)
其他回答
递减模式的最快方式:
var iteration = 10000000;
while(iteration > 0){
iteration--;
}
速度比:
var iteration = 10000000;
while(iteration--);
Javascript微优化测试
我想为这个线程贡献最快的JavaScript循环,是跨浏览器的!与反向while循环相比,该循环的性能提高了500%以上。
我的博客:JavaScript中最快的循环
爱死它了,很多分数但没有回答:D
简单地把比较放在零总是最快的比较
因此(a==0)返回True比(a==5)更快
它很小且无关紧要,并且集合中有1亿行,因此它是可测量的。
例如,在循环中,你可能会说where I <= array。长度和I的增量
在下行循环中,你可能会说I >= 0,而不是减去I。
比较速度更快。而不是循环的“方向”。
它取决于数组在内存中的位置,以及访问该数组时内存页面的命中率。
在某些情况下,按列顺序访问数组成员比按行顺序访问快,因为命中率增加了。
使用前缀增量操作符要快一些。对于后缀,编译器必须保留之前的值作为表达式的结果。
for (var i = 0; i < n; ++i) {
do_stuff();
}
聪明的解释器或编译器会看到i++的结果没有被使用,也不会存储表达式的结果,但不是所有的js引擎都这样做。