JavaScript の for文のベンチマークを取ってみた
 前回のエントリーの続き。

 「グダグダ言わずにベンチとってみればエエやん」ということで、JavaScript の for文のスタイルが、どんだけ速度に影響を及ぼすのかを調べてみた。

 で、まずベンチマークのツール探しから。ググってみたら amachangさんの作ったベンチマークツールが見つかった。ありがとう、amachangさん! ありがたく使わせていただきます!!

 ということで、こんな感じでベンチマークを取ってみる事にした。
benchmark({  
test_a: function(){
var sum = 0;
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (var i = 0, l = arr.length; i < l; i++) {
for (var j = 0, m = arr.length; j < m; j++) {
for (var k = 0, n = arr.length; k < n; k++) {
sum += arr[k];
}
}
}
},

test_b: function(){
var sum = 0;
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
for (var k = 0; k < arr.length; k++) {
sum += arr[k];
}
}
}
}
});
for文を3重にして、配列の値を足し込んでみるテスト。test_a が配列長を一旦変数に入れるバージョン。test_b が lengthメソッド(プロパティ?)を直接使うバージョン。


結果
Win: IE6
*** test_a ***
result : 0.9447833999999999[ms]
.
*** test_b ***
result : 1.241418[ms]

Win: FireFox1.5 (なぜか1.5w)
*** test_a ***
result : 0.8368538[ms]
.
*** test_b ***
result : 0.9928537999999999[ms]

Mac: Safari
*** test_a ***
result : 4.361354[ms]
.
*** test_b ***
result : 4.571354[ms]

Mac: FireFox2
*** test_a ***
result : 0.5450144[ms]
.
*** test_b ***
result : 0.7530144[ms]

 確かに、配列長を一旦変数に入れた方(test_a)が速い事は速いが、ビミョー。1 ms も違わないよ(むしろ、Safari の異様な遅さが目を引いてしまう)。タイプする時間を考えたら、トータルでは後者(test_b)の方が効率的な気がする。

 ということで、「オレは配列長を一旦変数に入れるのを止めるぞ!ジョジョーッ!!」という結論になりました。
[PR]
by fkmn | 2007-02-28 23:17 | IT
<< 実践『JavaからRubyへ以... JavaScript の fo... >>


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX