以前、activerecordのrequireは遅いという記事を書いた。
activerecordのrequireは遅い
activerecordのrequireは遅い(2)
このRequire自体はRailsではプロセスを起動する初回しか行われない。プロセスを起動した後は、Railsは起動しっぱなしになる。だから、遅くても構わない、という雰囲気であるのがようやく見えてきた。
よって、フレームワークなしにActiveRecordをCGIに使おうとする場合には工夫が必要で、その工夫ができない場合は素直にRailsを使ったほうがいいんだね、ということが分かったのが先月。CGIなんてWebからプロセス起動しているだけだろ、簡単だろーっと思っていたら叩き落とされた。
正直、意味分からないエントリだった。このキーワードで検索で引っかかってくる方々には申し訳ない。
で、実際にチューニングをしていくと、DBとViewのどっちかで遅くなってくる。自分みたいなDB初心者の場合はDBで遅くなることが多いと思う。少し油断するとテキストデータのレスポンスに1sとかありえない待ち時間になる(だとしてもRailsを使う前は毎回ActiveRecordのrequireに1s以上かかっていたので…)。
DBで遅くなっているかいないかについては、
# less log/development.log
を見れば大体わかる。
で、DBで遅くなっている原因が何度もアクセスしているからであれば、DBへのアクセスを:include =>して1つにまとめる。何度も見られるページかつ更新が必要ないページで、DBの最初の1発が遅いのであれば、memcachedみたいなキャッシュに放り込む。
ということをして、(DB初心者でも、やっと)レスポンス200msを切ることができるようになった。
Railsにはデバッグモードのdevelopmentと、公開モードのproductionがあり、productionのレスポンスのスピードはdevelopmentに比べて速い。productionで最終的にチューニングをすることになる。