Makoto Kuwata
kwa****@kuwat*****
2012年 1月 15日 (日) 12:33:47 JST
桑田です。 tDiaryでは、いたるところで eval や instance_eval がつかわれてますが、 これを多少なりとも少なくするパッチを書きました。 自分が調べた限りでは、1回のリクエストにつき instance_eval() の 呼び出し回数を 43 回減らせました。 ただし、ベンチマークしたかぎりではアプリケーション全体のパフォーマンスは ほとんど変わらなかったので、興味なければ無視していただいて結構です。 ------------------------------------------------------------ diff --git a/tdiary/config.rb b/tdiary/config.rb index 6a1ca95..adc0c0d 100644 --- a/tdiary/config.rb +++ b/tdiary/config.rb @@ -246,18 +246,16 @@ module TDiary private def setup_attr_accessor_to_all_ivars - instance_variables.each do |ivar_sym| + s = '' + instance_variables().each do |ivar_sym| v = ivar_sym.to_s.sub( /@/, '' ) - instance_eval( <<-SRC - def #{v} - @#{v} - end - def #{v}=(p) - @#{v} = p - end - SRC - ) + s << "def #{v}; @#{v}; end\n" + s << "def #{v}=(p); @#{v}=p; end\n" end + instance_eval(s) + ## or + #names = instance_variables().collect {|ivar| ivar.to_s.sub(/@/, '') } + #(class << self; self; end).class_eval { attr_accessor *names } end def configure_bot_pattern ------------------------------------------------------------ 以上です。 -- makoto kuwata