あるページを見せるために、
1.イメージの場所(ファイル名)をデータベースに問い合わせる
2.ユーザのセッションがそのイメージを見るに値するかどうかをデータベースに問い合わせる
必要があって、activerecordをライブラリとしてcgiで読み込ませていたのだが、
そのページ出力が遅いということで文句を言われた。
そのページは100枚程度であり、連続してcgiへの要求が行われる。
そのページの主体は画像イメージであり、テスト回線であるADSLの上り回線のスループットが低いために問題が出ていたのだろうと仮定し、当初は画像イメージのサイズ減少の作業を行っていった。
しかしながら”上り回線とは関係ないローカルな環境でさえ遅い”という現象も見られたので、それ以外の原因を探っていったところ、activerecordの読み込みが遅いという結論に至った。
ActiveRecordはrequireに時間がかかる? – OVERT MEMOを参考に、実際に読み込みを行ってみたら、確かに遅い。
noch@noch-ubuntu:~$ time ruby -rubygems -e “require ‘activerecord'”
real 0m1.298s
user 0m0.912s
sys 0m0.156s
noch@noch-ubuntu:~$ time ruby -rubygems -e “require ‘activerecord'”real 0m1.274s
user 0m1.020s
sys 0m0.144s
noch@noch-ubuntu:~$ time ruby -rubygems -e “require ‘activerecord'”real 0m1.034s
user 0m0.444s
sys 0m0.064s
問題はライブラリの読み込みにあったので、簡単な対処法としてはactiverecordの読み出しをdrubyサーバの方に追い出し、cgiではdrubyサーバのメソッドの呼び出しを行うようにした。
そうすることによって異常に読み込みスピードが早くなった。体感的には2,3倍程度。
railsではどのように対処しているのだろうか?ここらへんは激しくキャッシュ処理を行っているような気がするなぁ…