- 2009年10月6日 11:52 PM
- programming
JavaScriptであるデータを文字列から整数に変換する時に,下記のような書き方をよく見かけるんだけど,これって本当に正しいんだろか?って言うのが,そもそもの疑問.
var num = “123456789” ? 0;
調べてみると,文字列から整数に変換するためには他にも方法がある.じゃぁ,それぞれの処理速度って,どうなってるんだろう?っていうことで気になったので調べてみた.
実験概要
以下の4パターンで速度を比較する.
- 文字列 ? 0
- 文字列 / 0
- parseInt(文字列,10)
- Number(文字列)
実験環境
OS:Windows Vista
Webブラウザ:Firefox3.5.3,Google Chrome 3.0.195.24 ,Internet Explorer 7.0
実験コード
ベンチマークに利用したコードは以下の通り.
function useSub(){
var startTime = new Date();
for(var i = 0; i < 1000000;i++){
var num = "123456789" - 0;
}
document.write(new Date() - startTime);
}
function useDiv(){
var startTime = new Date();
for(var i = 0; i < 1000000;i++){
var num = "123456789" / 1;
}
document.write(new Date() - startTime);
}
function useparseInt(){
var startTime = new Date();
for(var i = 0; i < 1000000;i++){
var num = parseInt("123456789",10);
}
document.write(new Date() - startTime);
}
function useNumber(){
var startTime = new Date();
for(var i = 0; i < 1000000;i++){
var num = Number("123456789");
}
document.write(new Date() - startTime);
}
useSub();
document.write("");
useDiv();
document.write("");
useparseInt()
document.write("");
useNumber();
実験結果
Firefoxの場合
- 2
- 2
- 81
- 155
Google Chromeの場合
- 209
- 218
- 114
- 194
InternetExplorerの場合
- 266
- 289
- 1172
- 753
考察
情報系を勉強してる人とか,組み込み系の経験がある人には当然かも知れないけど,徐算より減算のほうが処理速度が速い.
減算を用いて文字列から整数型に変換する手法は,実際によく使われている方法であり,実験の結果からも,FirefoxとInternetExploereにおいては,これが最速の方法であることがわかる.
ただし,Google Chromeにおいては,parseIntやNumberを利用して型変換を行ったほうが速度が速い.とはいえ,10倍も速度差があるわけではないので,余程の事がない限りは減算を利用して型変換を行えば良いと思う.
コメント:4
- bunsuirei 2009年10月7日
同様の効果を奏するにしても,やり方で処理速度が数十倍も違うことがあるのですね.興味深いです.
特にFirefoxとGoogle Chromeの実行時間を,最速のケースで比較すると100倍も違うというのが面白いです.Google ChromeもJavaScriptの実行速度に定評がありますので,Google Chromeにはもっと速い別のやり方があるのではと思いたち,追加テストを行ってみました.
以下の2つについて特に面白い結果が出ました.
1.文字列 + 0
2.文字列 ? 0IE6.0
2422
641Google Chrome 3.0.195.24
150 (←面白いところ)
587Firefox 3.0.14
94
96Safari
534
177OS:Windows XP
Google Chromeだけは「文字列 ? 0」の方が速いです.
そして,Webkitを使用していることから同様の挙動を示すとも思われるSafariは「文字列 + 0」の方が速いです.とはいえ(テスト範囲において),IE6で最速の型変換とGoogle Chromeの最遅の型変換の実行速度はほぼ同じです.
テストから得られる結論としては,おっしゃる通り,余程の事がない限りは減算を利用して型変換を行うのが良いようです.- kur 2009年10月7日
追加テストありがとうございます.ですが,
文字列 + 0
という書き方だと,型変換ではなく,文字列連結という意味に解釈されてしまう気がします.
- bunsuirei 2009年10月7日
typeofで確認したところ,ご指摘いただいた通り,文字列連結と解釈さておりました.恐れ入ります.
さらに一つ勉強させていただき,ありがとうございました.
- harajune 2009年10月8日
手元の環境でビット演算とビットシフトも試してみたけどNumberと同程度に遅かった。
注目すべきところでparseIntの第二引数を渡さないで使うとIE以外のどのブラウザでも一番速くなるっぽいところかも。
トラックバック:0
- この記事のトラックバック URL
- http://kur.jp/2009/10/06/stringtoint-by-javascript/trackback/
- トラックバックの送信元リスト
- JavaScriptで文字列型から整数型への変換速度比較 - kur.jp より