2013年12月26日木曜日

[JavaScript]最速の配列ループ処理

大量の配列データを捌くときは少しでも速い処理を心がけたいものですが、JavaScript配列処理を少しでも速くするにはどうすればよいのでしょうか。今回はちょっと基本に戻って、JavaScriptで最速の配列ループ処理を再確認してみたいと思います。

環境
OS: Ubuntu 13.10
ブラウザ: Chrome バージョン 30.0.1599.114

試験コード
// preparing
var a = new Array(10000000);
var len = a.length;
for (var i = 0 ; i < len;  i++) {
  a[i] = i;
}

console.time('1');
loop(a);
console.timeEnd('1');

console.time('2');
loop2(a);
console.timeEnd('2');

console.time('3');
loop3(a);
console.timeEnd('3');

console.time('4');
loop4(a);
console.timeEnd('4');


function loop(arr){
  var len = arr.length;
  for (var i = 0 ; i < len;  i++) {
    arr[i] = i;
  }
}

function loop2(arr){
  for (i in arr) {
    arr[i] = i;
  }
}

function loop3(arr){
  var len = arr.length;
  while(len--){
    arr[len] = len;
  }
}

function loop4(arr){
  arr.forEach(function(a, i){
    a = i;
  });
}
結果
1: 115.747ms
2: 4611.730ms
3: 104.171ms
4: 566.905ms

(1)ノーマルなfor文と(3)while(len--) が最も速く、(2)for-in文が一番遅いことが判明しました。
このあとFirefoxでも計測してみましたが、順位はほとんど同じ結果となりました。
というわけで、特に理由がなければノーマルなfor文を使うのが良さそうですね。

0 件のコメント:

コメントを投稿