Кэширование страниц - это кэширование всего содержимого страницы. Кэширование страниц может встречаться в различных местах. Например, выбрав соответствующий странице заголовок, браузер пользователя может кэшировать просматриваемую страницу на некоторое время. Веб-приложение также может само хранить содержимое страницы в кэше. В данном подразделе мы рассмотрим именно второй вариант.
Кэширование страницы может быть рассмотрено как частный случай кэширования фрагмента. Из-за того, что содержимое страницы часто генерируется применением макета к представлению, кэширование не будет работать, если мы просто вызовем в макете методы beginCache() и endCache(). Причина этого в том, что макет применяется при вызове метода CController::render() после оценки формирования содержимого представления.
Для кэширования всей страницы мы должны пропустить этап формирования содержимого страницы. Для выполнения этой задачи мы можем использовать класс COutputCache как фильтр действия. В коде ниже показано, как можно сконфигурировать фильтр кэша:
public function filters()
{
return array(
array(
'COutputCache',
'duration'=>100,
'varyByParam'=>array('id'),
),
);
}
Вышеприведенная конфигурация фильтра создает фильтр, применяемый ко всем
действиям контроллера. Мы можем ограничить это поведение одним или
несколькими действиями только используя оператор +
.
Подробнее с работой фильтров можно ознакомиться в теме
фильтры.
Подсказка: Мы можем использовать класс COutputCache в качестве фильтра, поскольку он наследует класс CFilterWidget, т.е. оба этих класса одновременно являются и виджетами и фильтрами. Фактически, способ работы виджета очень похож на работу фильтра: виджет (фильтр) выполняется до того, как любое вложенное содержимое (действие) будет сформировано (выполнено), а выполнение виджета (фильтра) заканчивается после того, как вложенное содержимое (действие) будет сформировано (выполнено).
Signup or Login in order to comment.