JavaScript:为什么原生 Array.prototype.map 比 Chrome 控制台中的 for 循环更快?

标签 javascript performance for-loop map

请在此处查看示例:http://jsperf.com/map-vs-for-basic 相反,在 chrome 控制台中,我得到了相反的结果(map 有时比 for 循环快 6-10 倍)。我猜会适得其反。

 var input = [];
 for(var i=0;i<10000;i++)input[i]=new Date(i);
    var output = [];

function perform(value,index){
    return value.toString()+index*index
}

console.time(1);output = input.map(perform);console.timeEnd(1);
// 1: 45.000ms

console.time(1);for(var i=0;i<input.length;i++)output[i]=perform(input[i],i);console.timeEnd(1);
// 1: 68.000ms

最佳答案

首先,你的测试是不现实的,因为:函数“perform”和网页DOM的更新比循环和使用“map”之间的区别要慢得多。也就是说,如果每一步运行者都需要喝杯咖啡并写一本书,这就像比较 100 米的冲刺。

您应该对一个非常快的函数进行测试。

为什么浏览器之间会有差异。

Map 可以在内部实现为:

  • 具有优化的 native /二进制函数:在这种情况下,他的使用速度要快得多。 Chrome 可能会这样做。
  • 就像一个循环,就像您所做的那样:在这种情况下,性能相似,但对“map”的额外调用和内部检查可能需要更多时间。

为什么原生实现更快

Javascript 是解释型代码,也就是说,可执行文件获取源代码并尝试执行请求的操作,但这意味着解析代码并执行结果树(很多工作)。 native 代码总是更快和优化。

如果 map 使用 native 代码实现,则允许执行优化和比仅 JS 循环更快的代码(假设两种实现都是正确且最佳的)。

关于JavaScript:为什么原生 Array.prototype.map 比 Chrome 控制台中的 for 循环更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17803219/

相关文章:

css - 即使在我的计算机上预览时,bootswatch 也会使我的网页加载速度变慢?

python - 使用 for 循环的多个水平堆叠条形图

javascript - 函数 Javascript || 的 NaN 返回值函数执行顺序

javascript - 按字符串值对数组进行排序

javascript - 将 HTML5 Canvas 作为 blob 上传

php - 循环声明中的函数?

javascript - 发电机真的有侵入性吗

python-3.x - 带掩码的 numpy 数组的邻居和

linux - 编写一个带有可变顶端的 bash for 循环

javascript - 在具有各种监听器的 for 循环中使用 addEventListener()