ActiveRecordはrequireに時間がかかる?
重い腰をあげてActiveRecordを実際にいじってみたのですが、これがずいぶん重たい。ちょっとした実験コードでも数秒固まります。
簡単に時間を計ってみると、mswin32でのrequireに8秒ちょっと(ActiveSupport 約5秒、ActiveRecord本体 約3秒)かかってるようですね…。
daemon動作させるならともかくCGIでは使えないかも。がっかり。
けれども、ぐぐってみても同様の評判は見あたりません。利用の大半がRuby on Rails環境とはいえ、利用者の数は十分多いはずなのですが。もしや環境依存?
xreaでも測ってみると、初回で約10倍、キャッシュに入ると約280倍(!)。これならCGIでも問題なさそうです。
mswin32では頻繁に起動するような使い方はせずに済むので、こちらもなんとでもなりそうです。でもなんでこんなにmswin32は遅いのだろう…?
以下に測定(と呼ぶには簡単すぎる方法ですが)の結果を載せておきます。
まずmswin32。*1
C:\>ruby -v ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32] C:\>ruby -rubygems -e "t=Time.now;require 'active_record';puts Time.now-t" 8.266 C:\>ruby -rubygems -e "t=Time.now;require 'active_record';puts Time.now-t" 8.89 C:\>ruby -rubygems -e "require 'active_support';t=Time.now;require 'active_record';puts Time.now-t" 2.922 C:\>ruby -rubygems -e "require 'active_support';t=Time.now;require 'active_record';puts Time.now-t" 2.906
rubygemsのオーバーヘッドはあるかもしれませんが、$LOAD_PATH指定で直接requireしても体感では差を感じることが出来ない程度でした。
次にxrea ssh。こちらはrubygemsを使っていません。
~> ruby -v ruby 1.8.5 (2006-12-04 patchlevel 2) [x86_64-linux] ~> ruby -I./lib -e "t=Time.now;require 'active_record';puts Time.now-t" 0.871413 ~> ruby -I./lib -e "t=Time.now;require 'active_record';puts Time.now-t" 0.30058 ~> ruby -I./lib -e "require 'active_support';t=Time.now;require 'active_record';puts Time.now-t" 0.148038 ~> ruby -I./lib -e "require 'active_support';t=Time.now;require 'active_record';puts Time.now-t" 0.142107