Hatena::ブログ(Diary)

yamada6789の日記

2010-01-09

*[JavaScript] 比較演算子 == と === の速度を比較

| 02:10 | *[JavaScript] 比較演算子 == と === の速度を比較 を含むブックマーク

JavaScriptには == 演算子の他に === という演算子があります。型を自動的に変換して比較するのが == で、 変換しないで比較するのが === 。

ということは、型の変換処理が入らない分、 === を使えば高速に動作するのかなと思い、以下のプログラムで処理速度を測ってみました。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">

function checkSpeed(){

    // 比較処理に使用するデータを生成
    var BUF_LEN = 1024;
    var buf = new Array(BUF_LEN);
    for(var i=0; i<BUF_LEN; i++){
        buf[i] = parseInt(Math.round(Math.random())); // 0か1をランダムにセット
    }

    // ループ回数を取得
    var loop = parseInt(document.getElementById("loop").value);

    var start, end;
    var time0, time1;
    var work;
    
    // ==比較演算子を使用した場合の時間を計測
    work = 0;
    start = (new Date()).getTime();
    for(var j=0; j<loop; j++){
        for(var i=0; i<BUF_LEN;i++){
            if(buf[i] == 1){ // ←ここで==比較演算子を使用
                work++;
            }
        }
    }
    end = (new Date()).getTime();
    time0 = end - start;

    // ===比較演算子を使用した場合の時間を計測
    work = 0;
    start = (new Date()).getTime();
    for(var j=0; j<loop; j++){
        for(var i=0; i<BUF_LEN;i++){
            if(buf[i] === 1){ // ←ここで===比較演算子を使用
                work++;
            }
        }
    }
    end = (new Date()).getTime();
    time1 = end - start;

    document.getElementById("time0").value = time0;
    document.getElementById("time1").value = time1;
}

</script>
</head>
<body id="main">
    ループ:<input type="text" id="loop" value="100000">x1024回<br>
    <input type="button" value="測定" onclick="checkSpeed();"><br>
    <input type="text" id="time0">ms ==<br>
    <input type="text" id="time1">ms ===<br>
</body>
</html>

●結果

ブラウザ 演算子 1回目 2回目 3回目 4回目
Chrome (v3.0) == 1489 1377 1486 1447
=== 1312 1301 1266 1260
Firefox (v3.5.7) == 2677 2768 2756 2728
=== 2832 2916 2958 2869
Opera (v10.10) == 14329 13797 13906 13859
=== 11562 11266 11531 11422
IE6.0 == 36578 36234 36672 36469
=== 37360 37250 37593 37531

単位はms 環境>OS:WindowsXP CPU:Core2Duo 2.1GHz MEM:3.5GB

●所感

二つの演算子間で多少の速度差があるようです。(普通に使う分には気にならない程度ですが。)

また、FirefoxIEでは予想に反して==演算子の方が速いという結果になりました。

ブラウザ間で比較するとChromeFirefoxが速いですね。文字通り桁が違います。

(なおOperaは次のバージョンでChrome以上に速くなっているという噂です。)

トラックバック - http://d.hatena.ne.jp/yamada6789/20100109/1263143419