*[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 |
●所感
二つの演算子間で多少の速度差があるようです。(普通に使う分には気にならない程度ですが。)また、FirefoxとIEでは予想に反して==演算子の方が速いという結果になりました。
ブラウザ間で比較するとChromeとFirefoxが速いですね。文字通り桁が違います。
(なおOperaは次のバージョンでChrome以上に速くなっているという噂です。)