Utilizando o CacheHelper no CakePHP

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

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.



Bem pessoal por enquanto é isso, espero que tenham gostado, comentem, compartilhem e até a próxima.







 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?