てきとうなさいと べぇたばん

このサイト、かなり速くなったと思います。

開発環境でのhtml_cacheなし。一番上の「GET 233」は秒単位かかってますねぇ。 開発環境でのhtml_cacheありのHTTP 200。「GET 233」は93ms。 開発環境でのhtml_cacheありのHTTP 304。「GET 233」は5msにまで…

キャッシュ機構を採用しました。

別に、このサイトではパフォーマンスの問題は出ないため特に何かを行う必要はないのですが、試しにキャッシュ機構を採用してみました。

html_cache

html_cacheを使用しました。Helperで、afterLayoutの後に、HTMLファイルを生成して、次回からのアクセスにはこれを使用する、というものです。

1回目の訪問を除き直接HTMLファイルを吐き出すようになり、phpを実行する必要もないため、非常に速くレスポンスを返せるようになりました。クライアントがブラウザの中にキャッシュを持っていたら304も返すので、更に速くなります。

htmlにキャッシュするこのプラグインについて、気をつけなければならないことがありますが、ソレは最後に書きました。検討されている場合、READMEを確認されることをすすめます。

設置方法

helperの方は普通に使用したいコントローラーに指定してあげればいいだけです。Contreller::$helpersの最後の要素にしてあげる必要があるみたい(READMEには書いてないけど)

var $helpers = array('HtmlCache.HtmlCache');

webroot/cacheを作成して、Apacheユーザーが書き込めるようにします。

$ mkdir --mode=0777 webroot/cache

最後に、webroot/.htaccessをplugins/html_cache/extras/webroot.htaccessにを例にして、キャッシュがあればキャッシュを、そうでなかったらそのまま実行というような感じの設定にします。

削除する際には、READMEにはcronとか使うといいと思うよとあります。というか、あとはREADME読んでください。

ちなみにですが、html_cache/controllers/components/html_cache_hook.phpにあるコンポーネントを有効にすると、HtmlCacheHookComponent::$clearActionsにあるメソッドを実行する際に自動でキャッシュを消してくれるみたいですね?READMEに書いてあるわけでもなく、ソースがあったので調べたらそうなっていましたけれども・・・

キャッシュされない?

あ、そうだ。READMEに書いてない情報があります。

  • app/config/core.phpにある、Configure::write('debug', 0);は0にしましょう。そうしないとキャッシュされません。
  • Authコンポーネントなどを利用して管理画面にアクセス中のブラウザではどんなに頑張ってもキャッシュされません。ログアウトしましょう。

向いてそうなサイト

たとえばここみたいな、更新が一方向のみのサイトでしょうかね。つまり、管理人がいて、その人だけが更新する、みたいな。

ユーザーが書き込めるようなサイトだとキャッシュを作成し、コメントごとにキャッシュを削除とキャッシュでリソース食われるとか本末転倒なので、ちょっと考えものですねぇ。cronで30分ごとに削除とかが有効かもしれませんが、リアルタイムじゃなくなるのが玉に瑕なのでほかの方法が良いのかなと。

ユーザーページにこのキャッシュを使用してはいけませんとREADMEに書いてあります。たとえば、ショッピングカートの内容をキャッシュすれば、そのキャッシュはだれでも閲覧できるため。