nov201011
John Marques
0
Gerando cache com Smarty
Olá Pessoal,
Hoje vamos falar sobre Smarty, um sistema de templates para PHP, mais especificamente iremos falar sobre como gerar cache como Smarty.
Decide postar sobre esse assunto, pois estou trabalhando com um site que vem dando dor de cabeça para seu dono, pois o grande número de acessos ao site, faz com que o processamento e número de requisições ao banco seja bem alto, deixando o site mais lento.
Mas a ideia de usar o Cache nesse site é por que, por conta dessa performance o site já foi retirado do ar por vários hospedeiros, pois consome muito processamento do servidor de hospedagem, ai o dono do site, tem que ficar migrando de servidor em servidor até achar um que suporte de fato.
Então se não usa “WordPress com aquele plugin WP Super Cache”, e quer da um melhorada na performance do site, veja abaixo um resumo sobre como usar o cache do Smarty. =D
Vantagens de se usar o cache
- Diminuir o processamento
- Diminuir o número de requisições ao banco de dados
Desvantagens de se usar o cache
- Administração dos arquivos de cache
Instalando o Smarty
Faça primeiramente o download da versão estável da biblioteca do Smarty no seguinte link http://www.smarty.net/do_download.php?download_file=Smarty-2.6.26.zip, depois extraia o o arquivo e zip e copie a pasta do Smarty para a pasta do seu site.
Crie as seguintes
| tpl_cache | Irá armazenar os arquivos de cache |
| tpl_compiler | Irá armazenar as templates compiladas |
| tpl_configs | Irá armazenar os arquivos de configuração |
| tpl_files | Irá armazenar as templates |
Essa estrutura não é obrigatória! Você pode fazer como achar que melhor adequado, o importante é que se sete os caminhos corretamente, logo abaixo veremos como.
Agora vamos para o código. \0/
Primeiro vamos criar o arquivo index.tpl na pasta tpl_files, será a template do arquivo inicial.
<html>
<head>
<title><strong>{$titulo}</strong></title>
</head>
<body topmargin="0" leftmargin="0" rigthmargin="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="50">
<strong>{$nome}</strong>, seja bem vindo ao site <strong>{$site}</strong>
</td>
</tr>
</table>
</body>
</html>
Agora vamos para o arquivo index.php, que irá chamar o Smarty e fazer o trabalho com cache.
// Include a classe do Smarty
require_once('Smarty-2.6.26/libs/Smarty.class.php');
// Caminho da pasta do site
define('PATH_ROOT', dirname(__FILE__));
// Instância o objeto
$smarty = new Smarty();
// Configurando os caminhos das pasta para o smarty
$smarty->template_dir = PATH_ROOT . '/tpl_files';
$smarty->compile_dir = PATH_ROOT . '/tpl_compiler';
$smarty->cache_dir = PATH_ROOT . '/tpl_cache';
$smarty->config_dir = PATH_ROOT . '/tpl_configs';
// Define que o Smarty irá utilizar cache
// Opção 1 : Diz para o Smarty que ele deve utilizar o tempo de vida, definido na configuração do Smarty
// Opção 2 : Diz para o Smarty que ele deve utilizar o tempo de vida, definido no arquivo de cache
$smarty->caching = 2;
// O Smarty já define o tempo de vida do cache de uma hora,
// mas podemos alterar. Lembrando que o tempo é em segundos
$smarty->cache_lifetime = 86400; // 1 dia
// Agora vamos verificar se existe um arquivo de cache
// Caso não exista ele passa os dados para a template
if(!$smarty->is_caching('index.tpl')) {
$smarty->assign(array(
'titulo' => 'John Marques.com.br - Gerando cache com Smarty',
'nome' => 'Fulano',
'site' => 'www.johnmarques.com.br'
));
}
// Exibe a template
$smarty->display('index.tpl');
Seguinte no arquivo index.php, o cache só é excluído e gerado um novo quando o arquivo de cache expira, caso contrário ele exibe o arquivo de cache.
Agora para você excluir um arquivo de cache é simples, abaixo está o código =D
// Exclui o arquivo de cache da template index.tpl
$smarty->clear_cache('index.tpl');
// Exclui todos os arquivos de cache
$smarty->clear_all_cache();
Agora vamos dizer que precise de vários arquivos de cache para uma mesma template, ai você vai dizer pra que John, ai eu digo, imagine um sistema de notícias, podemos criar um cache para cada noticia. =D
Como?
Agora mostro como ! =D
// ID da notícia
$noticia_id = $_GET['id'];
//No momento em que se verifica se existe o arquivo de cache passe o segundo parâmentro do método, que é a identifição do chace ou $cache_id.
// O mesmo deve se fazer no display
if(!$smarty->is_caching('noticia.tpl', $noticia_id)) {
// busca os dados na notítica
}
// Exibe a template
$smarty->display('noticia.tpl', $noticia_id);
// Para excluir basta informa o cache_id
$smarty->clear_cache('noticia.tpl', $noticia_id);
// ou limpar todos
$smarty->clear_all_cache();
Perceba que ele irá criar um arquivo de cache para cada notícia que você visualizar.
É isso ai, espero que tenham gostado do arquivo, e que isso possa ajudar a otimizar a performance dos sites que você produzirem.
Para saber mais sobre a documentação do Smarty acesse http://www.smarty.net/manual/pt_BR/.
Então até a próxima.
Abraços,
John Marques








