2012年1月15日

[tDiary-users-talk: 0502] [patch] eliminate calling'instance_eval()'

桑田です。
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

_______________________________________________
tDiary-users-talk mailing list
tDiary-users-talk@xxxxx
http://lists.sourceforge.jp/mailman/listinfo/tdiary-users-talk


投稿者 xml-rpc : 2012年1月15日 12:33
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/108167
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。