javascript - 为什么负 while 循环如此之快?

标签 javascript performance loops while-loop repeat

<分区>

我正在开发一个专门用于实用程序的库。它将具有帮助您操作的函数:字符串、数组、数字、对象等等。性能是一个主要焦点。在处理字符串的重复函数(重复一个字符串 n 次)时,我决定测试一下我当前方法的速度:

Array(n + 1).join(string); // n = times to repeat; string = string to copy

与仅使用循环相比。事实证明,虽然这是重复字符串的最短方法,但也是最慢的。我知道它仍然很快。我的意思是,一个人不可能在 1 秒内做 200,000 件事,但与循环相比它很慢。

是什么让循环如此之快?我注意到一个特别快的循环是包含 i-- 的 while 循环:

var i = 10;
while (i--) {
    // do stuff
}

我决定使用这种方法,因为它是最快的。但我想知道为什么?是什么让它比其他方法快得多?

这里是 my benchmark . while 循环比 for 循环慢的唯一浏览器是 Opera。它在 Internet Explorer 10 中特别快。

最佳答案

你的js perf有很多错误,你有:

  • 差一个,差十个,差九个错误
  • 测试内嵌代码
  • 不检查结果

fixed jsperf结果使 更有意义:

enter image description here

请注意,+= str 已优化,更像是使用 StringBuilder。如果那是你的困惑。 Array 代码分配一个新数组并调用 join,这是一个语义复杂的复杂函数。 .join 也没有被 V8 优化。

对于其余代码,它们在每次运行时总是彼此非常接近,但性能不同,因此它们具有相同的性能。


重复项也有错误的信息,如果您循环遍历一个数组,那么您就是在处理 CPU 缓存,因此不仅在最好的情况下负数几乎相同,而且如果您循环遍历一个数组,情况会更糟。它出现在 jsperf 中也是。

关于javascript - 为什么负 while 循环如此之快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026738/

相关文章:

python - while 循环不会因多个条件而停止

JavaScript for 循环性能 - 在函数内部更好?

PHP数组循环+MySQL数据

javascript - nodemon - 内部监视失败 : ENOSPC: no space left on device, watch '/home/user/Documents/github/sendMail-lib/3808.txt

javascript - 寻找支持 IE6 的圆 Angular jQuery 插件

javascript - 使文本在移动设备上可见,在桌面设备上不可见

javascript - Jquery循环中setTimeout的使用

performance - 并发用户计算

android - 如何在没有php的情况下在android中使用java使用volley检索mysql数据?

python - Python 3 的枚举速度是否比 Python 2 慢?