Utilizando o CacheHelper no CakePHP

Veja nesse artigo como economizar em tempo de carregamento de página guardando dados em cache usando o CacheHelper do CakePHP.

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.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados