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 ほどの差は出なかったけど.極力使わないように気をつけよう.