1. 程式人生 > 實用技巧 >關於for、foreach、map、filter、forin迴圈實際執行效率的比較

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