Files
yii/docs/guide/caching.page.txt
2009-05-10 12:25:55 +00:00

48 lines
1.8 KiB
Plaintext

Page Caching
============
Page caching refers to caching the content of a whole page. Page caching
can occur at different places. For example, by choosing an appropriate page
header, the client browser may cache the page being viewed for a limited
time. The Web application itself can also store the page content in cache.
In this subsection, we focus on this latter approach.
Page caching can be considered as a special case of [fragment
caching](/doc/guide/caching.fragment). Because the content of a page is
often generated by applying a layout to a view, it will not work if we
simply call [beginCache()|CBaseController::beginCache] and
[endCache()|CBaseController::endCache] in the layout. The reason is because
the layout is applied within the [CController::render()] method AFTER the
content view is evaluated.
To cache a whole page, we should skip the execution of the action
generating the page content. We can use [COutputCache] as an action
[filter](/doc/guide/basics.controller#filter) to accomplish this task. The
following code shows how we configure the cache filter:
~~~
[php]
public function filters()
{
return array(
array(
'COutputCache',
'duration'=>100,
'varyByParam'=>array('id'),
),
);
}
~~~
The above filter configuration would make the filter to be applied to all
actions in the controller. We may limit it to one or a few actions only by
using the plus operator. More details can be found in
[filter](/doc/guide/basics.controller#filter).
> Tip: We can use [COutputCache] as a filter because it extends from
[CFilterWidget], which means it is both a widget and a filter. In fact, the
way a widget works is very similar to a filter: a widget (filter) begins
before any enclosed content (action) is evaluated, and the widget (filter)
ends after the enclosed content (action) is evaluated.
<div class="revision">$Id$</div>