Smarty e Caching

Monday, June 30, 2008
By PHPSP Administrator

O artigo a seguir foi publicado originalmente por Gregory Brown no site http://elbugz.livejournal.com/1034.html

As informações disponibilizadas neste artigo são de responsabilidade de Gregory Brown do site http://elbugz.livejournal.com/

O Smarty é conhecido mais como um “Template engine” do que um “caching engine”. Embora a documentação fale sobre o cache, ele é pouco utilizado pelas pessoas e tende-se a pensar nele mais como uma ferramenta de exibição do qualquer outra coisa.

Vamos do começo…

O que é esse tal de caching engine?

Quando você faz um código php simples, por exemplo:

pag: exemplo1.php
<?php
for ($i=0;$i<5;$i++){
echo “$i – Linha repetida.<br />\r\n”;
}
?>
Ao rodar ele, o resultado será:

0 – Linha repetida.<br />
1 – Linha repetida.<br />
2 – Linha repetida.<br />
3 – Linha repetida.<br />
4 – Linha repetida.<br />

Toda vez que você acessar a página exemplo1.php, o que acontece é:

1 – seu servidor HTTP pede para o PHP interpretar o código-fonte do exemplo1.php
2 – o PHP lê o arquivo e processa as instruções nele
3 – ele cospe o resultado de volta para o servidor web
4 – o servidor web manda pra você.

Tá, legal, e daí? Você pergunta?

Aqui que entra o Caching-engine.

Um Caching engine permite você fazer algo um pouco diferente:

Toda vez que você acessar a página exemplo1.php, o que acontece é:

1 – seu servidor HTTP pede para o PHP interpretar o código-fonte do exemplo1.php
2 – o PHP lê o arquivo e processa as instruções nele
3 – o Caching-Engine (CE) verifica se existe uma versão já pronta da página
3a – se não tiver, ele executa as operações do for
3b – tem, lê o arquivo do disco.
4 – ele cospe o resultado de volta para o servidor web
5 – o servidor web manda pra você.

OK, então um caching engine basicamente cria uma cópia rendida de um arquivo pronto. Parece ser balela inútil, principalmente com um exemplo tão tosco e simples como um “for”.

Agora extrapolemos….

Imagine uma página que lê uma tabela de log do seu banco. Esses dados pegam o resultado estatístico a cada hora. Porque seu site tem muitas visitas, o LOG é bem extenso, e as queries demoram uns 2 segundos pra responder. Agora não só a query demora uns dois segundos pra responder, mas você ainda precisa fazer uma série de contas e cálculos complexos com os dados que são produzidos pela query.
Sua página agora demora uns 3 segundos pra responder, e nesse meio tempo, o processadordo servidor  fica próximos dos 75%.

Você pergunta “tá e?”.

Agora lembre-se que seu servidor tem acessos pra caramba. Imagine 1000 usuários solicitando a mesma página em 1 minuto? O site trava, bomba, cai ou qualquer outra terminologia que você queira atribuir a esse acontecimento.

Se você utilizar um CE, o processamento ocorre somente uma vez, na primeira solicitação. Uma cópia do resultado é arquivado, e os outros 999 usuários vão estar vendo um HTML e não um PHP processado realtime.

Resultado? Seu site não cai, os outros serviços continuam livres para usar o processador.

4 Responses to “Smarty e Caching”

  1. Mas oq acontece se houver estruturas IF no smarty (pra tratar o perfil d usuario por exemplo) e uma mesma página possa trazer resultados diferentes dependendo da ocasiao, e essa pagina nao for interpretada mas apenas recuperada do cache? BOOMM

    Já aconteceu comigo de, por exemplo, ter um menu que se o usuario estivesse logado com perfil d administrador aparecer um determinado item no menu… mas como a pagina foi cacheada, usuarios sem perfil administrativo visualizavam esse link.

    #84
  2. Na verdade esse tópico eu vou cobrir em detalhes no terceiro ou quarto artigo (sim tem tanta coisa para se falar de cache), mas só pra te dar uma prévia…
    O Smarty permite você gravar cache com identificadores. Usando seu exemplo (não vou entrar em detalhes técnicos, só teóricos aqui):
    Você faria o cache do menu assim:
    menu.tpl|statusLogado
    assim, na página que carrega o menu, você pegaria setaria a variável statusLogado para true ou false. Essencialmente, criando duas versões do cache, uma para usuários logados e outra para usuários não logados.
    Meio complicado explicar assim, mas vou chegar lá nos artigos.

    #85
  3. A questão é que podemos usar o método de cache para determinadas páginas apenas o que resolve o problema do caching em todo o site.

    #86
  4. TAZ, isso é verdade, porém, não necessariamente bom. Mais dois artigos estão em vias de serem publicados aqui (já tem a versão deles no meu site) que explica em detalhes como usar o cache do Smarty evitando esse tipo de problema.
    Falta ainda concluir o tutorial, e prometo que tento fazer isso ainda essa semana.

    #87

Leave a Reply