RubyのRefinementされたメソッドの性能
通常のメソッドと比べて性能に差があるのかどうか比べてみた。
require 'benchmark' class Integer def to_comma to_s.reverse.scan(/\d\d?\d?/).join(',').reverse end end def method_no_args end module RefineMethod refine Object do def refine_method_no_args end end end n = ARGV.shift || '1_000_000' n = n.to_i puts "#{n.to_comma} times." Benchmark.bm(45) do |x| x.report('method_no_args') { n.times do method_no_args end } x.report('refine_method_no_args') { using RefineMethod n.times do refine_method_no_args end } end
結果、まったく差がなかった。
1,000,000 times. user system total real method_no_args 0.549699 0.000000 0.549699 ( 0.550169) refine_method_no_args 0.500810 0.000000 0.500810 ( 0.501193)
性能のことは気にせずRefinementを使おう。