С версии 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'); ?>
Затем вам нужно определить что вы хотите кешировать.
В этом разделе мы покажем вам как сообщить Cake'у, что кешировать. Это делается настройкой переменной контроллера, называемой $cacheAction. Переменная $cacheAction должна быть масивом, который содержит действия которые вы хотите кешировать, и время (в секундах) того, сколько хранить кешированные данные. Временное значение также может быть strtotime() (как '1 day' или '60 seconds').
Скажем у нас есть Products Controller? с какими-то элементами, которые мы хотим кешировать. Следующие примеры покажут как использовать $cacheAction для того, чтобы дать команду Cake'у кешировать определенные части действий контроллера.
<?
//Кеш самых часто-посещаемых страниц за 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));
?>
Ниже есть несколько вещей, которые нужно запомнить о кешировании отображения: