zoukankan      html  css  js  c++  java
  • 关于for、foreach、map、filter、forin循环实际运行效率的比较

    为了准确for、foreach、map、filter、for in这些循环的效率,我写了下面的方法。

    为了避免单次运行的随机性,让每个循环都跑100次,然后取平均值。得出的平均值跟单次结果存在误差(单次运行远大于平均后的值),但可以对比使用。

    完整代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            <script>
                // 数组初始化
                var testData = []; 
                var x = 10000;
                for(var i = 0; i < x; i++){
                    testData[i] = i;
                }
                var time1=new Date;
                //for循环
                for(var m=0;m<100;m++){
                    for(var i = 0; i < testData.length; i++){
                        testData[i]++;
                    }
                }
                var time2=new Date;
                console.log((time2-time1)/100+"ms(for)");
                
                //foreach
                for(var m=0;m<100;m++){
                    testData.forEach(function(value, item, arr){ 
                         arr[item]++;
                    });
                }
                var time3=new Date;
                console.log((time3-time2)/100+"ms(foreach)");
                
                //map
                for(var m=0;m<100;m++){
                    testData.map(function(value, item, arr){ 
                         arr[item]++;
                    });
                }
                var time4=new Date;
                console.log((time4-time3)/100+"ms(map)");
                
                //filter
                for(var m=0;m<100;m++){
                    testData.filter(function(value, item, arr){ 
                        arr[item]++;
                    });
                }
                var time5=new Date;
                console.log((time5-time4)/100+"ms(filter)");
                
                //forin
                for(var m=0;m<100;m++){
                    for(i in testData){ 
                        testData[i]++
                    };
                }
                var time6=new Date;
                console.log((time6-time5)/100+"ms(for in)");
                
            </script>
        </body>
    </html>

    测试环境:chrome 84.0

    测试结果:

    当x=1万次时,平均时间

    当x=10万次时,平均时间

    当X=100万次时,平均时间

    x=100万次,单独运行的时间

    当X=1000万次,单独运行时间

    当X=1亿次,单独运行时间(放弃for in)

    结论:

    从测试结果来看,1万次左右,大家基本差别不大;

    10万次开始到100万次,整体效率 for>filter>foreach≈map>for in;

    可见for循环的效率最高(50ms以内),且前四种循环在时间上接近(200ms以内),for in的效率最低(超过1.5s);

    当循环达到1000万次时,其他循环在1s内均可完成,for in 则接近13s。

    当达到1亿次时,性能有非常明显了。

  • 相关阅读:
    Java中的final关键字
    使用chrome浏览器调试时的搜索技巧
    查看“文件路径”&“在此处打开命令窗口”
    python安装 错误 “User installations are disabled via policy on the machine”
    Charles 激活入口以及账号密码
    大数据学习(一) | 初识 Hadoop
    Django基础3-数据库交互
    Django基础2
    Django基础使用1
    创建-Django创建启动
  • 原文地址:https://www.cnblogs.com/liangtao999/p/13446643.html
Copyright © 2011-2022 走看看