CakePHPのキャッシュ機能をまとめます CakePHP1.2系対象です。
▼キャッシュ機能の有効化
「app/config/core.php」の以下の部分のコメントアウトをはずし有効化
Configure::write(‘Cache.disable’, false);
Configure::write(‘Cache.check’, true);
▼キャッシュ時間の設定
キャッシュの時間は、 基本は「サイト全体」「任意コントローラ全体」「任意アクション」に設定できます。
◆サイト全体に適用する場合
「app/app_controller.php」のコンストラクタなどで、「 $this->cacheAction 」に時間を設定
$this->cacheAction = “5 minutes”;
← 5分間キャッシュする
◆コントローラ全体に適用
※それぞれのコントローラ毎にキャッシュ時間の変更が可能
コントローラにて以下を定義
var $helpers = array(‘Cache’);
var $cacheAction = “5 minutes”;
← 5分間キャッシュする
◆アクション毎に適用
※それぞれのアクション毎にキャッシュ時間の変更が可能
コントローラ内の各アクションで個別に指定
$this->cacheAction = “5 minutes”;
← 5分間キャッシュする
▼エレメント毎にキャッシュ時間を設定する
上記のキャッシュ設定が優先されるため、エレメントのキャッシュを行いたい場合、 上記のキャッシュ設定を行わないページ表示のときのみ可能となる。 ※「サイト全体に適用」を行っている場合は、エレメントへのキャッシュ設定は不可
実際エレメントへキャッシュを適用する場合は、以下のように行う
$this->element(‘helpbox’, array(‘cache’ => true));
◆エレメント毎にキャッシュ設定を変更可能
$this->element(‘helpbox’, array(‘cache’ => array(‘key’ => ‘first_use’, ‘time’ => ‘+1 day’), ‘var’ => $var));
$this->element(‘helpbox’, array(‘cache’ => array(‘key’ => ‘second_use’, ‘time’ => ‘+1 day’), ‘var’ => $differentVar));
参考:http://book.cakephp.org/ja/view/561/Caching-Elements
▼キャッシュの無効化
<cake:nocache> ~ </cake:nocache>
と特殊タグで囲むことによりその部分のキャッシュを行わない設定が可能
ただし、この部分にPHP変数を設定すると、そのPHP変数をセットする必要があり。
→キャッシュが成立すると、コントローラのアクションも実行されないため
その場合、「requestAction」などで、他の処理を呼び出す方法などで可能。
ただ、パフォーマンスに問題ありそう。
参考:http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=472&forum=7
上記のキャッシュ方法だと、
1.ページ1枚をキャッシュ 2.エレメントをキャッシュ
どちらか一方にしか対応ができない。
◆1の弊害
ページをキャッシュすると、ログインエレメントなども他人のログイン状態でキャッシュされてしまう
◆2の弊害
「ランキング」「商品リスト」などエレメントのみキャッシュされ、メインの一覧部分がキャッシュされない
これを解決するため、 CakePHPアプリのデフォルトの構築方法をキャッシュ前提対応にすべく、 現在検証中です。 また、『CakePHP キャッシュまとめ(2)』とかで書こうと思います。