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.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
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');
}
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.
Bem pessoal por enquanto é isso, espero que tenham gostado, comentem, compartilhem e até a próxima.
Allan Douglas
Analista Programador, com foco nas linguagens Java e PHP, Tecnico em Informática Formado pela Escola Técnica Redentorista - Campina Grande Paraíba. Graduando em Análise de Sistemas pela Estácio do Recife.




