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

*1:Ruby本体、ちょっと古いですね。