美文网首页
for、forEach、map的性能对比

for、forEach、map的性能对比

作者: 思路清奇 | 来源:发表于2020-07-03 10:48 被阅读0次

    性能比较:for > forEach > map

    说明一下:性能的比较实际上与环境使用的V8版本相关,这也是为什么map方法在chrome里比在Node中慢10倍,有人测试过(在chrome 62 和 Node.js v9.1.0环境下):for循环比forEach快1倍,forEach比map快20%左右。

    原因分析:

    for:for循环没有额外的函数调用栈和上下文,所以它的实现最为简单。

    forEach:对于forEach来说,它的函数签名是这样的

    array.forEach(function(currentValue, index, arr), thisValue)
    

    其中包含了参数和上下文,这回影响它的性能。

    map:map最慢的原因是因为map会返回一个新的数组,数组的创建和赋值会导致分配内存空间,因此会带来较大的性能开销。如果将map嵌套在一个循环中,便会带来更多不必要的内存消耗。

    如何选择 forEach 和 map:

    简单来说:
    当你的循环不需要返回值(也不应该返回),不需要改变数据的时候(虽然允许callback改变),比如,你只是想借助这次遍历去做一些事情,那么就可以选择forEach

    当你需要改变数据值,或者需要链式调用的时候,那么就使用map;

    //比如你想实现:
    array.map(...).fitler(...).some(...)
    

    一点建议:

    虽然map确实可以实现某些你想要的操作,比如:

    let data = [];
    let data2 = [1,2,3];
    data2.map(item=>data.push(item));
    console.log(data); // [1,2,3]
    

    当它其实更适合forforEach
    正如MDN中所描述的那样 Array.prototype.map()

    因为map生成一个新数组,当你不打算使用返回的新数组却使用map是违背设计初衷的,请用forEach或者for-of替代。你不该使用map: A)你不打算使用返回的新数组,或/且 B) 你没有从回调函数中返回值。

    所以在有eslint的今天,尽量不要忽略任何一个~提示。

    相关文章

      网友评论

          本文标题:for、forEach、map的性能对比

          本文链接:https://www.haomeiwen.com/subject/zaijqktx.html