Home > programming > JavaScriptで文字列型から整数型への変換速度比較

JavaScriptで文字列型から整数型への変換速度比較

JavaScriptであるデータを文字列から整数に変換する時に,下記のような書き方をよく見かけるんだけど,これって本当に正しいんだろか?って言うのが,そもそもの疑問.

var num = “123456789” ? 0;

調べてみると,文字列から整数に変換するためには他にも方法がある.じゃぁ,それぞれの処理速度って,どうなってるんだろう?っていうことで気になったので調べてみた.

実験概要

以下の4パターンで速度を比較する.

  1. 文字列 ? 0
  2. 文字列 / 0
  3. parseInt(文字列,10)
  4. 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の場合

  1. 2
  2. 2
  3. 81
  4. 155

Google Chromeの場合

  1. 209
  2. 218
  3. 114
  4. 194

InternetExplorerの場合

  1. 266
  2. 289
  3. 1172
  4. 753

考察

情報系を勉強してる人とか,組み込み系の経験がある人には当然かも知れないけど,徐算より減算のほうが処理速度が速い.

減算を用いて文字列から整数型に変換する手法は,実際によく使われている方法であり,実験の結果からも,FirefoxとInternetExploereにおいては,これが最速の方法であることがわかる.

ただし,Google Chromeにおいては,parseIntやNumberを利用して型変換を行ったほうが速度が速い.とはいえ,10倍も速度差があるわけではないので,余程の事がない限りは減算を利用して型変換を行えば良いと思う.

Comments:4

bunsuirei 09-10-07 (水) 6:50

同様の効果を奏するにしても,やり方で処理速度が数十倍も違うことがあるのですね.興味深いです.
特にFirefoxとGoogle Chromeの実行時間を,最速のケースで比較すると100倍も違うというのが面白いです.

Google ChromeもJavaScriptの実行速度に定評がありますので,Google Chromeにはもっと速い別のやり方があるのではと思いたち,追加テストを行ってみました.

以下の2つについて特に面白い結果が出ました.
1.文字列 + 0
2.文字列 ? 0

IE6.0
2422
641

Google Chrome 3.0.195.24
150 (←面白いところ)
587

Firefox 3.0.14
94
96

Safari
534
177

OS:Windows XP

Google Chromeだけは「文字列 ? 0」の方が速いです.
そして,Webkitを使用していることから同様の挙動を示すとも思われるSafariは「文字列 + 0」の方が速いです.

とはいえ(テスト範囲において),IE6で最速の型変換とGoogle Chromeの最遅の型変換の実行速度はほぼ同じです.
テストから得られる結論としては,おっしゃる通り,余程の事がない限りは減算を利用して型変換を行うのが良いようです.

kur 09-10-07 (水) 7:05

追加テストありがとうございます.ですが,

文字列 + 0

という書き方だと,型変換ではなく,文字列連結という意味に解釈されてしまう気がします.

bunsuirei 09-10-07 (水) 11:03

typeofで確認したところ,ご指摘いただいた通り,文字列連結と解釈さておりました.恐れ入ります.

さらに一つ勉強させていただき,ありがとうございました.

harajune 09-10-08 (木) 11:27

手元の環境でビット演算とビットシフトも試してみたけどNumberと同程度に遅かった。
注目すべきところでparseIntの第二引数を渡さないで使うとIE以外のどのブラウザでも一番速くなるっぽいところかも。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://kur.jp/2009/10/06/stringtoint-by-javascript/trackback/
Listed below are links to weblogs that reference
JavaScriptで文字列型から整数型への変換速度比較 from kur.jp

Home > programming > JavaScriptで文字列型から整数型への変換速度比較

メタ情報


Return to page top