javascriptの文字列→整数変換で最速な方法は?
スポンサーリンク
javascriptでは文字列から整数への変換方法は色々あります.せっかくなので処理速度が良い物を使いたいものです.ですので,簡単に処理速度を計測してみました. 文字列→整数以外も今後測ってみます.
文字列から整数の変換方法まとめ
parseInt(str, 10); str&-1; -1&str; str|0; 0|str; str^0; 0^str; str>>0; str<<0; ~~str;
参考
たまにメモる。: JavaScriptにおける数値と文字列の相互変換を参考にさせていただきました.文字列から数値への変換だけでなく,整数⇔小数の変換など詳しく書いてあります.お勧めです.
環境
PC:
Windows 7 32bit , Intel Core i3 3.20GHz
ブラウザ:
- google chrome バージョン 31.0.1650.63 m
- firefox 26.0
ベンチマーク関数
簡単な処理時間計測関数を作ってみます.
benchmarkN(n, f)
はn回関数fを実行します.applyを使用することにより,関数fに適用する引数もbenchmarkN(n, f, s)
のように追加で引数として加えられるようにしてあります.
//処理時間計測関数 function benchmarkN(n, f) { var args = Array.prototype.slice.call(arguments).slice(2); var s = new Date(); for(var i = 0; i < n; i++){ f.apply(null, args); } return new Date() - s; } var n = 10000000; //関数呼び出し回数 var s = "1234567"; //テスト用文字列 //テスト for (var i = 0; i < fs.length; i++) { var t = benchmarkN(n, fs[i], s); console.log(fs[i].toString() + "\t\t// time =" + t + "msec."); }
結果
chrome
function (str){ return parseInt(str); } // time = 561 msec. function (str){ return parseInt(str, 10); } // time = 484 msec. function (str){ return str&-1; } // time = 780 msec. function (str){ return -1&str; } // time = 749 msec. function (str){ return str|0; } // time = 734 msec. function (str){ return 0|str; } // time = 733 msec. function (str){ return str^0; } // time = 733 msec. function (str){ return 0^str; } // time = 811 msec. function (str){ return str>>0; } // time = 780 msec. function (str){ return str<<0; } // time = 733 msec. function (str){ return ~~str; } // time = 749 msec.
firefox
function (str){ return parseInt(str); } // time = 782 msec. function (str){ return parseInt(str, 10); } // time = 802 msec. function (str){ return str&-1; } // time = 915 msec. function (str){ return -1&str; } // time = 915 msec. function (str){ return str|0; } // time = 917 msec. function (str){ return 0|str; } // time = 930 msec. function (str){ return str^0; } // time = 915 msec. function (str){ return 0^str; } // time = 930 msec. function (str){ return str>>0; } // time = 929 msec. function (str){ return str<<0; } // time = 932 msec. function (str){ return ~~str; } // time = 936 msec.
グラフ
もう一回測りなおしてグラフを作成してみました.
最速は,parseInt(str, 10)
です! ビット演算子を使用する手法と比べますと,明らかに速いことがわかりました.やっぱり正統派な方法で変換しましょう,ということですかね.
parseInt(str, 10)
とparseInt(str)
では,何度か測ってみたところそこまで変わらなかったので,使用するとしたらparseInt(str)
が妥当でしょうか.