ブログトップ 記事一覧 ログイン 無料ブログ開設

YasuyukiMiuraの日記

2008-05-24

switchとifの速度を比べてみた

Firefox 3とFirebugで始めるJavaScript開発:第2回 Firebugによるデバッグの基本,Console APIとその活用|gihyo.jp … 技術評論社にてプロファイルのとり方が載っていたので試した。


中核は以下のもの。switchが速いのは比較が == じゃなくて === を使っているからだという話がDeLLa.JSの方で出ていたので、ifは2バージョン作って試す。

console.profile();

function Switch() {
    var a = [0, 0, 0, 0, 0, 0, 0];
    var tmp;
    for(var i = 0; i < 1000; i++) {
        tmp = i % 7;
        switch(tmp) {
        case 0:
            a[0]++; break;
        case 1:
            a[1]++; break;
        case 2:
            a[2]++; break;
        case 3:
            a[3]++; break;
        case 4:
            a[4]++; break;
        case 5:
            a[5]++; break;
        default: // case 6
            a[6]++;
        }
        console.count();
    }
}

function If() {
    var a = [0, 0, 0, 0, 0, 0, 0];
    var tmp;
    for(var i = 0; i < 1000; i++) {
        tmp = i % 7;
        if(tmp == 0)      a[0]++;
        else if(tmp == 1) a[1]++;
        else if(tmp == 2) a[2]++;
        else if(tmp == 3) a[3]++;
        else if(tmp == 4) a[4]++;
        else if(tmp == 5) a[5]++;
        else              a[6]++;
        console.count();
    }
}

function If2() {
    var a = [0, 0, 0, 0, 0, 0, 0];
    var tmp;
    for(var i = 0; i < 1000; i++) {
        tmp = i % 7;
        if(tmp === 0)      a[0]++;
        else if(tmp === 1) a[1]++;
        else if(tmp === 2) a[2]++;
        else if(tmp === 3) a[3]++;
        else if(tmp === 4) a[4]++;
        else if(tmp === 5) a[5]++;
        else               a[6]++;
        console.count();
    }
}

for(var i = 0; i < 10; i++) {
    Switch();
    If();
    If2();
}
console.profileEnd();

結果は以下のようになった。

FunctionCallsPercentOwn TimeTimeAvgMinMax
If1046.27%1249.23ms1249.398ms124.94ms70.098ms563.859ms
If21027.12%732.247ms732.41ms73.241ms71.225ms74.75ms
Switch1026.62%718.656ms718.822ms71.882ms69.265ms74.165ms

やはりSwitchが一番速い。が、===の方のifと明らかな差は無かった。jumpの回数が減るからswitchは速いという訳でもないらしい。


そういえば、プロファイルをとろうしたとき詳細は分からないけどローカルファイルでは駄目だった。設定かなにかでどうにかはなるのかもしれない。仕方が無いのでNiftyの方にアップして実行している。ファイルhttp://kokosabu.way-nifty.com/test/switch.htmlなので、良かったら自分でもやっていただければと思う。

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


画像認証

トラックバック - http://d.hatena.ne.jp/YasuyukiMiura/20080524/1211612944
リンク元