From: "NARUSE, Yui" Date: 2010-03-13T03:11:34+09:00 Subject: [ruby-dev:40604] Re: 1.9のrequireが遅い 成瀬です。 特に意見はないんですが、参照追加だけ [ruby-core:28113] http://redmine.ruby-lang.org/issues/show/2723 (2010/03/13 2:38), Shugo Maeda wrote: > またYehuda Katz情報なのですが、Ruby 1.9で、$:の要素が多いとrequireが遅いようです。 > > defiant:build$ cat t.rb > 1000.times { > $:.push "/opt/ruby/1.8" > } > 1000.times do > require "rational" > end > defiant:build$ time ruby -v t.rb > ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux] > ruby -v t.rb 0.07s user 0.08s system 90% cpu 0.164 total > defiant:build$ time ruby-trunk -v t.rb > ruby 1.9.2dev (2010-03-10 trunk 26866) [i686-linux] > lib/rational.rb is deprecated > ruby-trunk -v t.rb 3.51s user 1.20s system 99% cpu 4.734 total > > この例は極端ですが、Gemパッケージがたくさん入っている状態でRailsを > 動かしたりすると、結構影響が大きいそうです。 > > どうも、rb_get_expanded_load_path()が何度も呼ばれるせいでこんなに > 遅いようなのですが、$:の中身がすべて絶対パスの時は、expand_pathを > 呼ばずにそのまま$:の値を使うようにしてはどうでしょうか。 > > 添付のパッチでかなり早くなりました。 > > defiant:build$ time ./ruby-trunk -v t.rb > ruby 1.9.2dev (2010-03-11 trunk 26868) [i686-linux] > lib/rational.rb is deprecated > ./ruby-trunk -v t.rb 0.28s user 0.01s system 99% cpu 0.293 total > > $:に相対パスが入っているとだめですが、幸い1.9では$:から.が削除されて > いますし、require_relativeも使えるので$:に相対パスを入れたいというニーズ > もあまりないんじゃないかと思っています。 -- NARUSE, Yui