关于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亿次时,性能有非常明显了。

posted @ 2020-08-06 18:13  梁涛999  阅读(3179)  评论(0编辑  收藏  举报