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