いろいろキャッシュ
CGI 動作時の動作を少しでも軽くするために、設定ファイルや文字列リソースなんかのテキストデータのバイナリ形式をキャッシュしたり、*.rhtml のコンパイル結果をキャッシュする修正をしていたんだけど、一段落したので本当に 0.8.6 と比べて速くなっているのか計測。
影舞-0.8.6
$ time w3m -dump 'http://localhost/kagemai-0.8.6/html/guest.cgi?project=cgibench&action=top' > /dev/null real 0m0.531s user 0m0.060s sys 0m0.040s
影舞-0.8.7
$ time w3m -dump 'http://localhost/kagemai-0.8.7/guest.cgi?project=cgibench&action=top' > /dev/null real 0m0.691s user 0m0.030s sys 0m0.020s
なんか遅くなってる!?
遅いところを解消するためにプロファイルをとりながら作業したので、ありえないんだけど!と思いつつ両方のプロファイルをとって比較してみると、Kernel.gem_original_require というのが時間を消費してるのを発見。
画像認証用に RMagick を require するためのやつか・・・。
とりあえず、rubygems を require するのは画像認証用のイメージを作るときまで遅らせるように修正。
$ time w3m -dump 'http://localhost/kagemai-0.8.7/guest.cgi?project=cgibench&action=top' > /dev/null real 0m0.477s user 0m0.030s sys 0m0.030s
こんどは一応速くなっている。でも、DBまわりのライブラリを gem で入れたい(入れてる)人もいるだろうしどうしたものかね。
ついでに影舞 0.8.6 のほうで rubygems を require する状態にして計測
$ time w3m -dump 'http://localhost/kagemai-0.8.6/guest.cgi?project=cgibench&action=top' > /dev/null real 0m0.716s user 0m0.060s sys 0m0.030s
つまりあれだ、いろいろキャッシュしてもあんまり効果はないってことだね。むしろ無駄なコードが増えてるだけだと言っていいかもしれない。まだボトルネックになってる処理はあるんだけど、その修正は影響範囲がわりと大きいので、0.8.7 を出した次に。