CakePHP : Manual11/ViewCache

Кеширование отображения


Оглавление документа

Что это?

С версии 0.10.9.2378_final, Cake поддерживает кеширование отображения (часто называется кешированием целой страницы). Нет, мы не шутим. Мы теперь можете кешировать свои размещения и отображения. Вы также можете определить части своего отображения, которые будут игнорироваться при кешировании. Возможность, при правильном использовании, позволяет ускорить ваше приложения на порядок.

Когда вы переходиде по ссылке, Cake сначала проверяет нет ли запрашиваемой ссылки в кеше. Если есть, Cake пропускает запрос и возвращает уже отреднеренную, кешированную версию страницы. Если страницы нет в кеше, Cake ведет себя обычно.

Если вы активируете возможность кеширования, Cake будет хранить исходящие данные из обычных операций в кеше для ваших пользователей. В следующий раз, когда запрошена страница Cake возьмет ее из кеша. Четко, да? Давайте копнем глубже, чтобы глянуть как это работет.

Как все это работает?

Активирование кеша

По умолчанию кеширование отображений отключено. Включить его можно, изменив значение CACHE_CHECK в /app/config/core.php с false на true:
/app/config/core.php (частично)
<?
define 
('CACHE_CHECK'true);
?>


Эта строка говорит Cake'у, что вы хотите включить кеширование.

В контроллере для отображений, которые вы хотите кешировать добавьте хелпер Cache в масив хелперов:
<? var $helpers = array('Cache'); ?>


Затем вам нужно определить что вы хотите кешировать.

Переменная $cacheAction контроллера

В этом разделе мы покажем вам как сообщить Cake'у, что кешировать. Это делается настройкой переменной контроллера, называемой $cacheAction. Переменная $cacheAction должна быть масивом, который содержит действия которые вы хотите кешировать, и время (в секундах) того, сколько хранить кешированные данные. Временное значение также может быть strtotime() (как '1 day' или '60 seconds').

Скажем у нас есть Products Controller с какими-то элементами, которые мы хотим кешировать. Следующие примеры покажут как использовать $cacheAction для того, чтобы дать команду Cake'у кешировать определенные части действий контроллера.

$cacheAction Примеры

<?
//Кеш самых часто-посещаемых страниц за 6 часов:
var $cacheAction = array(
    
'view/23/'  => 21600,
    
'view/48/'  => 21600
);

//Кешировать целое действие. В это случае список продуктов recalled, на один день:
var $cacheAction = array('recalled/' => 86400);

//Если мы хотим, то можем кешировать каждое действие, установив это в строку:
//в которой strtotime() определяет время кеширования
var $cacheAction "1 hour";

//вы также можете определять кеширование в действиях, используя $this->cacheAction = array()...
?>

Маркировка содержимого в отображении

Есть исключения, где вы можете захотеть не кешировать какие-то части отображения. Если же у нас есть некие элементы, выделяющие новые продукты, или что-то вроде этого, вы может быть захотите сообщить Cake'у кешировать отображение... за исключением маленькой части.
<cake:nocache> </cake:nocache>.

<cake:nocache> example
<h1> New Products! </h1>
<cake:nocache>
<ul>
<?php foreach($newProducts as $product): ?>
<li>$product['name']</li>
<?endforeach;?>
</ul>
</cake:nocache>

Очистка кеша

Сначала вам полезно будет знать, что Cake автоматически очищает кеш если были сделаны изменения в базе данных. Например, если одно из отображений использует информацию из вашей модели Post, и там были сделаны INSERT, UPDATE или DELETE, Cake очистит кеш для этого отображения.

Но могут быть случаи когда вы хотите очистить определенные файлы из кеша. Сделать это можно функцией clearCache, которая доступна глобально:
<cake:nocache> example
<?
//Удаляет все кешированные страницы с именем controller.
clearCache('controller'); 

//Удаляет все кешированные станицы с именем controller_action.
clearCache('controller_action/'); 

//Удаляет все кешированные страницы с именем controller_action_params. 
//Заметка: у вас может быть несколько параметров
clearCache('controller_action_params'); 

//Вы также можете использовать масив, чтобы удалить несколько кешей за раз.
clearCache(array('controller_action_params','controller2_action_params)); 
?>

Для запоминания

Ниже есть несколько вещей, которые нужно запомнить о кешировании отображения:
  1. Для включения кеша вы устанавливаете CACHE_CHECK на true в /app/config/core.php .
  2. В контроллере для отображений, которые хотите кешировать вы добавляете Cache хелпер в масив хелперов.
  3. Для кеширование определенных ссылок, используйте $cacheAction в контроллере.
  4. Чтобы уберечь некоторые части отображения от кеширования, поместите их в теги <cake:nocache> </cake:nocache>
  5. Cake автоматически очищает определенные копии кеша, когда происходят изменения в базе данных.
  6. Для очистки кеша вручную, используйте clearCache().