Cache é uma espécie de armazenamento temporário que ajuda a reduzir a carga no servidor. Por exemplo, você poderia armazenar resultados de uma consulta demorada de banco de dados de forma que não precisasse ser executada a cada vez que a página fosse carregada.

O CacheHelper faz com que o conteúdo de views e layouts sejam mantidos no cache do navegador, economizando o tempo da obtenção de dados. O cache de views no CakePHP armazena temporariamente o código renderizado usando o mecanismo de armazenamento definido.

O helper funciona de forma diferente de outros helpers. Ele não possui métodos a serem chamados diretamente. Ao invés disso, uma view é marcada com tags de cache indicando quais blocos de conteúdo não devem ser cacheados.

Quando uma URL é requisitada, o Cake verifica se a string da requisição já está em cache. Se já estiver, o restante do processo de expedição da URL é simplesmente ignorado. Todos os blocos que não tenham sido marcados serão processados normalmente. Isto cria uma grande economia de tempo de processamento para cada requisição à URL cacheada uma vez que um mínimo de código é de fato executado. Se o Cake não encontrar uma view no cache ou se o cache para aquela view já estiver expirado, ele continua o processo da requisição normalmente.

Usando o CacheHelper

Para usar o CacheHelper devemos seguir dois passos: o primeiro é descomentar a linha 130 de app/Config/core.php isto vai dizer ao cake para checar e gerar views com cahe.

Listagem 01: Descomentando linha para verificação do cache.

/**
 * Enable cache checking.
 *
 * If set to true, for view caching you must still use the controller
 * public $cacheAction inside your controllers to define caching settings.
 * You can either set it controller-wide by setting public $cacheAction = true,
 * or in each action using $this->cacheAction = true.
 *
 */
  Configure::write('Cache.check', true);

O segundo passo é adicionar o helper ao array de helpers do controller que ira usar o cache.

Listagem 02: Habilitando o CacheHelper no controller.

<?php
class PostsController extends AppController {
    public $helpers = array('Cache');
}

Configurações adicionais

Existem algumas poucas configurações que podemos fazer para manipular o comportamento do helper. Isto pode ser feito através da variável $cacheaction no controller. Devemos setar essa variável com um array que deve conter o nome a action e o tempo que se deve guardar o cache da mesma. Esse tempo pode ser em segundos ou numa expressão de strtotime().

Listagem 03: Configurando variável de cache.

<?php
class PostsController extends AppController {
    public $helpers = array('Cache');
public $cacheAction = array(
    'view' =-> 36000,
    'index'  => 48000
);
}

Assim o cache de view fica disponível por 10 horas e o de índex por 13 horas. Podemos usar uma expressão no formato strtotime(), que fica mais amigável, e também setar $cacheaction para todas as actions, vejamos:

Listagem 04: Configurando $cacheaction para todas as actions.

<?php
public $cacheAction = "1 hour";
?>

Marcando blocos Nocach

Em determinados momentos, queremos que alguns pontos da view não sejam guardados no cache, como por exemplo, a verificação de se um usuário está logado ou não. Para não permitir que o cache atue sobre determinado bloco basta colocar o conteúdo dentro de , assim:

Listagem 05: usando o nocahe.

<!-- nocache -->
//verifica se ha usuário logado.
<?php if ($this->Session->check('User.name')): ?>
  //se houver exibe o nome dele.
    Bem Vindo, <!?php echo h($this->Session->read('User.name')); ?>.
<?php else: ?>
  //se não houver exibe o link para fazer o login.
    <?php echo $html->link('Login', 'users/login'); ?>
<?php endif; ?>
<!-- /nocache -->

Limpando o cache

O cake limpará o cache sempre que o model referente a view for modificado, ou seja, sempre que houver um insert, update, delete o cake limpará o cache. E se por algum motivo você precisar fazer esta limpeza manualmente use Cache::clear(), isto também irá limpar todos o cache.