關於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億次時,性能有非常明顯了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM