Tableless

Busca Menu

Acelere o carregamento de seu site com PHP Caching

Seja o primeiro a comentar por

Criar um site dinâmico, de fácil manutenção e que carregue rápido é o desejo de todo desenvolvedor, mas para isso não existe uma fórmula mágica, é necessário conciliar diferentes ferramentas e técnicas.

Mas muitos desenvolvedores iniciantes em PHP não conhecem as soluções existentes ou tem medo da curva de aprendizado que os frameworks exigem.

O foco desse artigo é mostrar para esses desenvolvedores como uma técnica simples, utilizando apenas comandos básicos do PHP, pode acelerar o carregamento de seu site e evitar que ele fique caindo.

O problema a ser resolvido, processamento desnecessário

Para cada acesso a um site dinâmico, o servidor geralmente realiza consultas no banco de dados, executa blocos de códigos e entrega uma página pronta para exibição.

Mesmo que os acessos a uma página ocorram com poucos segundos de diferença e nada no conteúdo tenha sido alterado, o servidor irá fazer o mesmo processo para cada solicitação, quantas vezes for preciso.

Isto é um trabalho desnecessário e que exige muito processamento do servidor, principalmente em momentos de tráfego intenso, e se o servidor não der conta, o seu site ficará temporariamente fora do ar.

A solução, PHP Caching

Também conhecido como Cache de Objetos, essa técnica executa uma página PHP e armazena o conteúdo gerado em um arquivo HTML, e para os próximos acessos, durante um certo período, o servidor irá entregar esse HTML gerado.

Sem a necessidade de consultar o banco de dados ou executar algum tipo de programação para montar a página, o servidor além de conseguir entregar uma página mais rapidamente, também suportará um número maior de acessos concorrentes.

Qual o ganho na performance?

Vai depender muito da programação do site, mas quanto mais ações forem realizadas no backend, maior será o ganho. Veja abaixo os resultados obtidos durante um teste:

A versão dinâmica foi entregue em 318 ms e a versão cacheada em 14 ms, 23 vezes mais rápido.

Desenvolvimento

Chega de teoria e vamos para a prática, criaremos juntos um exemplo que seja o mais simples possível.

Primeiro crie uma pasta no seu ambiente de desenvolvimento chamada phpcaching, dentro dela crie outras duas pastas, uma chamada paginas onde iremos armazenar as páginas dinâmicas em PHP e outra chamada cache que irá armazenar os arquivos HTML.

Dentro da pasta paginas crie um arquivo chamado index.php, com o código:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>PHP Caching</title>
</head>
<body>
    <p>Página gerada em: <?php echo date('H:i:s') ?></p>
</body>
</html>

Teste a página que acabamos de criar, acessando ela pelo navegador, no meu caso o endereço é: http://localhost/phpcaching/paginas/index.php

Você verá uma página simples, que apenas mostra o horário atual toda vez que é acessada.

Agora vamos criar o nosso controlador de cache, que irá funcionar da seguinte maneira:


Sabendo a lógica de funcionamento, fica mais fácil programar nosso controlador. Crie na raiz do projeto um arquivo chamado index.php com o seguinte código:

<?php
// Configurações
$validadeEmSegundos = 60;
$arquivoCache = 'cache/index.html';
$urlDinamica = 'http://localhost/phpcaching/paginas/index.php';

// Verifica se o arquivo cache existe e se ainda é válido
if (file_exists($arquivoCache) && (filemtime($arquivoCache) > time() - $validadeEmSegundos)) {

    // Lê o arquivo cacheado
    $conteudo = file_get_contents($arquivoCache);
} else {

    // Acessa a versão dinâmica
    $conteudo = file_get_contents($urlDinamica);

    // Cria o cache
    file_put_contents($arquivoCache, $conteudo);
}

// Exibe o conteúdo da página
echo $conteudo;

Vou explicar as funções utilizadas para caso você não conheça alguma delas:
file_exists: verifica se um arquivo existe
file_get_contents: lê o conteúdo de um arquivo
file_put_contents: escreve o conteúdo em um arquivo
filemtime: retorna o horário que o arquivo foi modificado
time: retorna o horário atual

Agora acesse o site através do controlador de cache, no meu caso http://localhost/phpcaching/

Repare que o horário aparece como anteriormente, mas se atualizarmos a página o horário não muda. Isto acontece porque a página exibida é a versão cacheada, que foi armazenada na pasta cache com o nome index.html.

Pronto, nossa solução para cachear páginas está criada.

Conclusão

Esta técnica é uma maneira eficaz de aumentar a performance de seu site, sem precisar instalar algo no servidor ou algum framework no seu projeto e é recomendada para quem está iniciando no assunto.

O código apresentado não é uma solução definitiva, mas uma base que podemos expandir de acordo com as necessidades de cada projeto, crie sua versão melhorada, faça um teste com um projeto que você já possua e analise a diferença no tempo de carregamento do site.

Eu utilizo essa técnica em um portal de notícias da minha região, e apesar do site já ter sido migrado de servidor algumas vezes, o código nunca precisou de alteração, essa é a vantagem de utilizar apenas comandos básicos do PHP.

Continuem os estudos e que a performance esteja com você.

Publicado no dia