- Начало
- Основы
- Работа с формами
- Работа с БД
- Кэширование
- Расширение Yii
- Тестирование
- Специальные темы
- Автоматическая генерация кода
- Красивые адреса URL
- Аутентификация и авторизация
- Темы оформления и скины
- Журналирование
- Обработка ошибок
- Веб-сервисы
- Интернационализация (I18N)
- Альтернативный язык шаблонов
- Консольные приложения
- Безопасность
- Улучшение производительности
- Генерация кода при помощи консоли (устаревшее)
Кэширование страниц
Кэширование страниц — это кэширование всего содержимого страницы. Кэширование страниц может встречаться в различных местах. Например, выбрав соответствующий странице заголовок, браузер пользователя может кэшировать просматриваемую страницу на некоторое время. Веб-приложение также может само хранить содержимое страницы в кэше. В данном подразделе мы рассмотрим именно второй вариант.
Кэширование страницы может быть рассмотрено как частный случай кэширования фрагмента. Из-за того, что содержимое страницы часто генерируется применением макета к представлению, кэширование не будет работать, если мы просто вызовем в макете методы beginCache() и endCache(). Причина этого в том, что макет применяется при вызове метода CController::render() после оценки формирования содержимого представления.
Для кэширования всей страницы мы должны пропустить этап формирования содержимого страницы. Для выполнения этой задачи мы можем использовать класс COutputCache как фильтр действия. В коде ниже показано, как можно сконфигурировать фильтр кэша:
public function filters() { return array( array( 'COutputCache', 'duration'=>100, 'varyByParam'=>array('id'), ), ); }
Вышеприведенная конфигурация фильтра создает фильтр, применяемый ко всем
действиям контроллера. Мы можем ограничить это поведение одним или
несколькими действиями только используя оператор +.
Подробнее с работой фильтров можно ознакомиться в теме
фильтры.
Подсказка: Мы можем использовать класс COutputCache в качестве фильтра, поскольку он наследует класс CFilterWidget, т.е. оба этих класса одновременно являются и виджетами и фильтрами. Фактически, способ работы виджета очень похож на работу фильтра: виджет (фильтр) выполняется до того, как любое вложенное содержимое (действие) будет сформировано (выполнено), а выполнение виджета (фильтра) заканчивается после того, как вложенное содержимое (действие) будет сформировано (выполнено).

