Кешування сторінок — це кешування всього вмісту сторінки. Кешування сторінок може зустрічатися в різних місцях. Наприклад, обравши відповідний сторінці заголовок, браузер користувача може кешувати сторінку, яка переглядається, на деякий час. Веб-додаток також може сам зберігати вміст сторінки у кеші. У цьому підрозділі ми розглянемо саме другий варіант.
Кешування сторінки може бути розглянуто як окремий випадок кешування фрагмента. Через те, що вміст сторінки часто генерується застосуванням макета до представлення, кешування не буде працювати, якщо ми просто викличемо в макеті методи beginCache() та endCache(). Причина цього у тому, що макет застосовується при виклику метода CController::render() після оцінки формування вмісту представлення.
Для кешування всієї сторінки ми повинні пропустити етап формування вмісту сторінки. Для виконання цього завдання ми можемо використовувати клас COutputCache як фільтр дії. У коді нижче показано, як можна сконфігурувати фільтр кешу:
public function filters() { return array( array( 'COutputCache', 'duration'=>100, 'varyByParam'=>array('id'), ), ); }
Вищенаведена конфігурація фільтру створює фільтр, який застосовується до всіх дій контролера. Ми можемо обмежити цю поведінку одним або кількома діями, тільки використовуючи оператор +. Докладніше з роботою фільтрів можна ознайомитися в темі фільтри.
Підказка: Ми можемо використовувати клас COutputCache як фільтр, оскільки він успадковує клас CFilterWidget, тобто обидва ці класу одночасно є і віджетами і фільтрами. Фактично, спосіб роботи віджету дуже схожий на роботу фільтра: віджет (фільтр) виконується до того, як будь-який вкладени вміст (дія) буде сформовано (виконано), а виконання віджету (фільтра) закінчується після того, як вкладений вміст (дія) буде сформовано (виконано).
Be the first person to leave a comment
Please login to leave your comment.