For of/forEach/map/reduceは、IE11では実装されていない

師匠の散歩Grandmaster Wander

JavaScriptのかけら9

繰り返し構文の速度

Perlでは、配列内容を取り出すのにforeachを使うのが常道です。これまで師匠は単純にForループを用いていましたが、 JavaScriptでもPerlと同じようなものがあれば利用しようとネットを探すとfor(of)が見つかりました。 ところが、さらに調べると、For ofFor(;;)よりも遅く、IEで使用できないことが こちらで見かけました。

見つけたものを自分でも比較してみないと気が済まないのが師匠の性質なので、比較スクリプトを作成して実験してみた結果をここに残します。

比較結果

まずは師匠の試験結果を表にします。使用したOSは Windows10/Windows7、ブラウザはFireFox,Chrome,IE,Edgeを比較しました。 パソコンの仕様によって、コーディング内容によって順位が変わると思いますので、参考程度でご覧いただければと思います。

ちなみに、Perlでの比較結果は、For(..)>Foreach(@)≫For(;;) の関係となり、For(..)が最も早い結果となりました。

Windows10
browserFireFoxChromeIE11Edge18
method
For(++)
For(--)
do while
while
For(of)
forEach(arrow)
forEach(function)
map(arrow)
map(function)
reduce(arrow)
reduce(function)
12345Ave.
9.49.77.46.66.78
7.57.36.46.16.17
6.87.35.76.56.97
8.38.67.27.87.28
17.424.818.318.417.019
8.37.97.87.87.88
7.06.76.76.66.97
72.065.263.763.862.065
70.168.069.369.380.972
7.26.45.65.65.66
11.410.610.710.910.911
12345Ave.
12.211.69.19.29.210
10.311.09.19.29.510
12.011.29.39.29.310
11.211.99.99.710.111
111.662.315.313.413.443
8.58.28.58.38.28
8.78.59.18.58.69
84.292.385.883.595.288
81.080.283.191.177.483
57.858.264.760.072.963
55.156.259.863.758.959
12345Ave.
10.09.07.37.57.48
5.25.35.26.06.76
6.67.37.47.25.67
5.35.25.15.35.15
12345Ave.
7.77.96.87.267
5.95.76.75.95.76
5.95.75.75.55.96
87.78.77.16.98
166.9142.5133.7143.2131.9144
88.378.876.690.996.286
7678.7111.7114.176.591
129.5133.4116.8119.7108.5122
119.1112.8108.3122.6119.8117
85.386.5102.191.478.489
93.681.879.7114.879.990

Windows7
browserFireFoxChromeIE11Edge18
method
For(++)
For(--)
do while
while
For(of)
forEach(arrow)
forEach(function)
map(arrow)
map(function)
reduce(arrow)
reduce(function)
12345Ave.
5.99.04.04.34.36
6.54.13.43.53.74
4.14.24.33.66.55
4.04.23.76.03.44
6.114.516.211.110.912
4.14.34.24.34.24
4.34.14.24.14.54
44.061.955.346.745.251
70.549.344.563.350.756
3.02.82.72.72.83
4.84.25.74.44.35
12345Ave.
263.134.54.14.15.162
4.85.44.34.14.15
6.46.04.67.14.76
4.85.24.54.44.35
56.340.89.89.710.025
4.84.84.84.85.05
4.84.84.84.75.05
84.450.278.843.859.663
70.744.146.244.845.250
37.337.137.337.838.638
37.439.837.136.737.438
12345Ave.
17.26.46.410.015.311
5.64.94.74.64.65
4.64.65.04.64.75
5.08.17.87.77.87
12345Ave.
14.69.05.35.35.28
6.26.45.35.35.46
6.29.75.68.511.48
8.36.35.45.25.26
58.267.710.413.311.432
8.77.88.07.413.99
9.110.97.117.19.211
66.861.478.659.460.865
103.791.791.387.2101.595
60.165.852.251.551.356
53.352.673.549.969.460

計算内容

ここでスクリプト表示しているのは簡略版です。実際に走っているスクリプトを見たい方はソースをご覧ください。

表示完了まで数秒はかかります。古いパソコンだとフリーズに近くなるかもしれませんのでご注意ください。

var arr = new Array(10000000);
    for (var i = 0; i < arr.length; i++) { }
    for (var i =arr.length - 1 ; i >= 0; i--) { }
    do { v++; } while ( v < arr.length ); 
    while( v < arr.length ){ v++; } 
    for (var v of arr) { }
    arr.forEach( v => {  });
    arr.forEach(function( value ) {  });
    arr.map(v => v);
    arr.map(function( value ) {  });
    sum= arr.reduce(v => v);
    sum = arr.reduce(function( value ) {  });



Topに戻る // 一覧に戻る
Copyright(C) Grandmaster since 2010 最終更新:2020/2/19