4

在此处查看示例: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
4

1 回答 1

4

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

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

为什么浏览器之间存在差异。

Map 可以在内部实现为:

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

为什么原生实现更快

Javascript 是解释代码,即可执行文件获取源代码并尝试执行请求的操作,但这意味着解析代码并执行结果树(大量工作)。本机代码总是更快和优化。

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

于 2013-07-23T07:24:04.927 回答