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

Back to archive index

Makoto Kuwata kwa****@kuwat*****
2012年 1月 22日 (日) 10:05:56 JST


桑田です。

2012/1/16 TADA Tadashi <t****@tdtds*****>:
> メソッド内でのrequireはそのメソッドが呼ばれる(つまりamazon
> プラグインが実際に利用される)まで実行されないのだから、require
> をメソッド内に移動すれば目的は達成できるように思えます。
> unless...の部分は不要では? もちろん同じrequireを何度も呼ぶコス
> トはありますが。

一般的には、require 'xxxx' よりも require 'xxxx' unless defined?(...) のほうが高速です。
理由は、たぶんですが require がメソッドなのに対して defined? は演算子だから。
特に rubygems のように rquire を上書きした状態では、require が組み込みのものでは
なくなるため、遅くなります。

とはいっても、マイクロベンチマーク上では require '...' unless defined?(...) のほうが
ずいぶん高速なんですが、それがアプリケーションの速度にまで影響するのはまれなので、
unless defined? なしでもいいと思います。
unless defined? をつけたのは、たとえば hash['key'] より hash[:key] のほうが速いよねーとか、
str.length == 0 より str.empty? のほうが速いよねーといった程度のものであり、個人的な習慣です。

--
makoto kuwata




tDiary-users-talk メーリングリストの案内
Back to archive index