2006-06-15
_ パイプを使った正規表現は遅いらしい
qootas.org/blog - perl regex performance で,
"|"(パイプ)を使った正規表現はめちゃくちゃ遅いから使わないように、ということです。確かにベンチマークを取ると32倍速いです。
とのことだったので,Ruby ではどうだろうと試してみた.
#!/usr/bin/env ruby
require 'benchmark'
text = ';lskjdf;klvckxv;zijxcv;oa;vlkaefiuqewizlkvnzlxkcnv'
text << '.z,xmc v/z.x,cmv.z,xnvlafda isjdnfl aksjdfauerfaie'
text << 'jnlfakjdsn;akj;v akjdfvoaijdhfvoiaheriufahpsdiufhaeuhr'
text << ' iuahriufhairuhfapsidfalksjfhaiuphrofiankfjas;dofha[s9'
text << 'hfskjdf;ase;f,sedhfaiuwhefs,dnvflk dfis fapoisf fqjr'
n = 500000
Benchmark.bm(10) do |x|
x.report("00_pipe:") { n.times do ; /abc|def|ghi/ =~ text; end }
x.report("01_nopipe:") { n.times do ; /abc/ =~ text or /def/ =~ text or /ghi/ =~ text; end }
end
$ ruby regex.rb
user system total real
00_pipe: 15.703000 0.000000 15.703000 ( 15.735000)
01_nopipe: 3.297000 0.000000 3.297000 ( 3.297000)
Ruby でも同様にパイプを使わない方が速いですね.4 倍以上といったところ.perl ほどの差は出なかったけど.極力使わないように気をつけよう.