ページキャッシュはページの内容全てをキャッシュすることを指します。 ページキャッシュは、別の場所で発生することがあります。 たとえば、適切なページヘッダーを使えば、クライアントブラウザは ページを有効期限付きでキャッシュするでしょう。 また、ウェブアプリケーション自身は、ページコンテンツをキャッシュとして 保存できます。このサブセクションでは、後者のやり方について解説します。
ページキャッシュは フラグメントキャッシュ の 特殊な形と捉えられます。ページの内容の多くはビューにレイアウトを適用し 生成されるため、レイアウト中で単純に beginCache() と endCache() を呼び出しても動きません。 なぜなら、レイアウトは、コンテンツビューが評価された後に、 CController::render() メソッド中で適用されるからです。
ページ全体をキャッシュするには、ページ内容を生成するアクションの実行を スキップしなければいけません。 これを行うために、COutputCache を フィルタ アクションとして使用出来ます。 キャッシュフィルタの設定方法を下記に示します:
public function filters()
{
return array(
array(
'COutputCache',
'duration'=>100,
'varyByParam'=>array('id'),
),
);
}
上記フィルタ設定は、コントローラのすべてのアクションに適用されます。 プラスの演算子だけを使い、1つかいくつかのアクションのみに制限することも できます。詳細については、フィルタ を参照してください。
ヒント: COutputCache は CFilterWidget より継承されているため、 COutputCache をフィルタとして使用できます。 実際、ウィジェットの動作はフィルタにとても似ています: ウィジェット(フィルタ)は、それに含まれているコンテンツ(アクション)が 評価される前に動作が始まり、そして、含まれているコンテンツ(アクション)が 評価された後に、ウィジェット(フィルタ)が終了します。
Signup or Login in order to comment.