よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

September 06, 2006 [おもひで]

[Ruby] 正規表現オブジェクトを定数で持つと高速化になる?(2)

昨日の結果がちょっと信じられなかったので、ひょっとしたら長い正規表現オブジェクトであればインスタンス生成に時間がかかるかもしれない、と思い、長めの正規表現で再度チャレンジしてみた。

$ cat test.rb
require 'benchmark'
str = "http://www.google.com/"
REGEXP = /^http:\/\/.*(72.14|64.233|66.102|216.239|google).*q=cache:([^:]*):(.*?)(\s|\\+)([^&]*).*/
Benchmark.bm(8){ |x|
  x.report("regexp"){1000000.times{/^http:\/\/.*(72.14|64.233|66.102|216.239|google).*q=cache:([^:]*):(.*?)(\s|\\+)([^&]*).*/ =~ str}}
  x.report("regexp2"){1000000.times{REGEXP =~ str}}
}
 
$ ruby test.rb
              user     system      total        real
regexp    0.910000   0.640000   1.550000 (  1.589382)
regexp2   1.180000   0.610000   1.790000 (  1.812263)

あり!?差が広がったぞ。なんだかインタプリタ内でうまいことチューニングされてるってことなのかな・・・。


編集