ようへい

2012年8月11日土曜日

[JavaScript] 正規表現はコンパイルしたほうが処理速度が速いのか?

今までJavaScriptにおいて、正規表現は使い捨ての正規表現を除いてコンパイルした方が早いと思っていました。
そして、コンパイルした方が早いのか確認するためのベンチマークツールを作ってみました。
チェックツールは以下から利用できます。
[JavaScript] ベンチマークツール - ログろいど
なんと、Firefox、Chromeではコンパイルした方が遅い。
Firefoxでは、コンパイルした場合と、しない場合の差は大きくないが、Chromeでは大きな差が出ました。
ちなみに、Firefoxで指定しているJavaScript JITコンパイラは JaegerMonkey。
私の実行環境はこんな感じ。
OS Windows 7 Professional Service Pack 1 32bit
CPU Intel Core i5 M 560 2.67GHz
RAM 2GB
テストコードは以下。
パターン1
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
パターン2
var r=new RegExp();
r.compile("h","g");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
パターン3
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
"hogehogehogehogehoge".replace(/h/g,"H");
パターン4
var r=new RegExp();
r.compile("h","g");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
"hogehogehogehogehoge".replace(r,"H");
確認を行ったのは以下のブラウザ。
  • Mozilla Firefox 14,15,16.17
  • Google Chrome 21
  • Windows Internet Explorer 9
このうち、IE9のみ、パターン4ではコンパイルした方が早いという結果になりました。
皆さんもチェックツールの結果をお教えください。
以下のリンクを開くと、上記のテストコードが入力された状態で開きます。
[JavaScript] ベンチマークツール - ログろいど
関連記事

0 件のコメント:

コメントを投稿