[tDiary-users-talk: 0494] [patch] change to load 'rexml' lazily for performance

Zurück zum Archiv-Index

Makoto Kuwata kwa****@kuwat*****
2012年 1月 14日 (土) 15:16:29 JST


桑田といいます。
tDiary (3.1.1) のパフォーマンスを改善するために、
REXML の require を遅延させてはどうでしょうか。

・REXML は読みこみがかなり重いライブラリであるため、これを読み込まないように
 するだけで簡単にパフォーマンスを改善できる (ただし CGI の場合)
・REXML は amazon plugin で利用されており、標準で enable になっているが、
 必ずしも amazon plugin の機能をみんなが使っているわけではない

パッチを添付します。

------------------------------------------------------------
diff --git a/misc/plugin/amazon.rb b/misc/plugin/amazon.rb
index 47e2519..ed5fdfa 100644
--- a/misc/plugin/amazon.rb
+++ b/misc/plugin/amazon.rb
@@ -8,7 +8,7 @@
 require 'net/http'
 require 'uri'
 require 'timeout'
-require 'rexml/document'
+autoload :REXML, 'rexml/document'

 # do not change these variables
 @amazon_subscription_id = '1CVA98NEF1G753PFESR2'
diff --git a/misc/plugin/amazon/amazonimg.rb b/misc/plugin/amazon/amazonimg.rb
index c84a760..b3dc984 100644
--- a/misc/plugin/amazon/amazonimg.rb
+++ b/misc/plugin/amazon/amazonimg.rb
@@ -51,7 +51,7 @@
 require 'cgi'
 require 'open-uri'
 require 'timeout'
-require 'rexml/document'
+autoload :REXML, 'rexml/document'

 def amazon_call_ecs( asin, country = nil )
 	aid = @amazon_aid || 'cshs-22'
------------------------------------------------------------


apache bench での計測結果です。
(MacOS X 10.6, Apache 2.2.14, tDiary 3.1.1, CPU Core2Duo 2GHz)

### (Ruby 1.8.7-p334)
### before
Requests per second:    3.46 [#/sec] (mean)
### after
Requests per second:    4.09 [#/sec] (mean)  # 18% up

### (Ruby 1.9.3-p0)
### before
Requests per second:    1.93 [#/sec] (mean)
### after
Requests per second:    2.23 [#/sec] (mean)      # 16% up


同じことは rss.rb にも言えます。
rss.rb は REXML よりさらに読み込みが重いライブラリなので、
これも読み込みを遅延できるならしたほうがいいと思います。
たた、rss.rb を使っているのは recent_rss.rb だけであり、
これはデフォルトでは disable になっているので、デフォルトの
状態でつかっている限りは影響はないです。

その他、主なライブラリの読み込みコストについては
http://www.slideshare.net/kwatch/how-to-make-ruby-cgi-script-faster-cgi
をご覧ください。


以上です。パッチの取り込みをご検討下さるようお願いします。

--
makoto kuwata




tDiary-users-talk メーリングリストの案内
Zurück zum Archiv-Index