Hatena::ブログ(Diary)

gan2 の Ruby 勉強日記 このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数 PV/ 870426 Subscribe with livedoor Reader 役立つリンク集

2008-07-04

配列を for で回すときは length を何度も参照すると遅い

JavaScripter な人たちには大分前から周知のことだけど

以下のスクリプトでどのくらい違うのかちょっと見てみた。

var bench = function(func) {
  var start = (new Date()).getTime();
  func();
  var end   = (new Date()).getTime();
  console.log(end - start);
};

var ary = new Array(1000000);
bench(function() {
  for (var i = 0; i < ary.length; i++) {
    ;
  }
});
bench(function() {
  for (var i = 0, l = ary.length; i < l; i++) {
    ;
  }
});

Firefox3 Firebug1.2.0b4 の上で実行すると

350
95

とか出る。


この速度差は、JS のドット演算子ハッシュテーブルの検索処理を伴うことが原因で生まれる。

上の for みたいに length を何度も参照するときは一時変数を用意してそちらを参照した方が速い。


また、ローカルの SpiderMonkeyconsole.log を print にして試したら

1367
501

とか出た。


どちらにせよ length を一回だけ参照する方が速いのは変わらないんだけど

Firefox3 の JS の方が SpiderMonkey のよりもかなり速いのにちょっと驚いた。

けっこう違うんだなぁ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gan2/20080704/1215150089