Neste exemplo, vamos verificar a otimização real usando um pequeno script em PHP para gerar um arquivo de cache usando o código, embora existam muitas maneiras e técnicas, hoje vamos analisar apenas uma delas.
O objetivo é criar arquivos HTML puros e estáticos, entenda que nos referimos a páginas puras e estáticas cujo conteúdo permanece inalterado e formatado com tags html.
Por outro lado, uma página de conteúdo dinâmico é aquela que, baseada em scripts PHP, pode eventualmente conter: processos longos e complexos, interação e consultas baseadas em dados, entre outras coisas, que são em última análise quais condições e apresentam seu conteúdo, inclusive eles podem variar entre um pedido e outro; Portanto, o objetivo é otimizar uma página de conteúdo dinâmico, mas, uma vez criado, esse conteúdo não precisa ser gerado constantemente.
Se precisarmos que o conteúdo seja cem por cento em tempo real e que varie constantemente, o cache, neste caso, não é uma opção recomendada ou útil, a intenção é “armazenar em cache” as páginas com conteúdos que de alguma forma podem levar N segundos no resfriamento e que em solicitações diferentes permanece inalterado por algum tempo.
Ao gerar arquivos HTML, estaremos protegendo o desperdício desnecessário de recursos do servidor e, obviamente, otimizamos o desempenho geral: recursos versus resultados, entendemos que consumindo HTML diretamente estaríamos alcançando: menos consultas ao Banco de Dados, menos processos, enfim isso se refletirá menos desgaste geral do nosso servidor web
- Para otimizar, precisamos ter uma métrica inicial
Bem, é o que temos que fazer, primeiro “medir” o tempo de execução de um script sem cache, pode ser uma página inteira ou parte do script (entende-se que quando dizemos páginas nos referimos ao documento individual, porque muitas pessoas poderiam se referir a ele erroneamente como uma página para um site).
Para ter uma métrica inicial, usaremos o seguinte código.
Se for uma página com conteúdo estático, não faz sentido usar essa técnica de cache.
<?php $comienzo= microtime(true); //no começo do arquivo ?>
Então usamos todo o código presente na página, sejam eles: PHP, HTML, CSS e/ou Javascript, dependendo do projeto.
E no final de tudo nós vamos colocar o seguinte.
<?php /*—————-Fin Código———————–*/ $final= microtime(true); //no fim do arquivo echo “Tempo: “. number_format($final-$comienzo,4).” segundos.”; ?>
Agora vamos ter documentado o tempo de execução inicial, devemos guardar essa informação como base para a análise.
Seguidamente criaremos dois novos arquivos.
top_cache.php <?php $começo= microtime(true); //no começo do arquivo $url = $_SERVER[“SCRIPT_NAME”]; //nós temos o nome da url e nomes de arquivos atuais $break = explode(‘/’, $url); //nós dividimos os sindicatos por e obtemos uma matriz de dados $file = $break[count($break) – 1]; //nós temos o nome real do arquivo $cachefile = ‘cached-‘.substr_replace($file ,””,-4).’.html’; //criamos um novo nome para o cache, isso será HTML para otimizar recursos $cachetime = 900; //nós definimos o tempo de duração do cache em segundos | 900/60 = 15 minutos // Servir do cache se for mais atual do que $cachetime if (file_exists($cachefile) && time() – $cachetime < filemtime($cachefile)) { echo “<!– Copia em cache gerada “.date(‘H:i’, filemtime($cachefile)).” –>\n”; include($cachefile); $final= microtime(true); //no final do arquivo echo “<div>Novo tempo: “. number_format($final-$começo,4).” segundos.</div>”; exit; } ob_start(); // Criar buffer de saída ?>
bottom_cache.php <?php // Armazenar em cache o conteúdo do arquivo $cached = fopen($cachefile, ‘w’); //pega o nome do arquivo de cache que criamos em topo_cache se ele não existe ou se já passou sua vida útil fwrite($cached, ob_get_contents()); //escreva todo o conteúdo do arquivo atual fclose($cached); ob_end_flush(); // Enviar o navegador ?>
Este arquivo top_cache.php deve ser incluído na primeira linha da minha página para “cache” e bottom_cache.php no final.
<?php include "top_cache.php"; ?>
Aqui vai o código PHP, HTML, css, etc.
<?php include "bottom _cache.php"; ?>
Em nossos testes, a melhora foi notada em 50%, mas estranhamente logo após a terceira chamada para a página em cache; isso não funciona corretamente quando há paginação no meio, porque isso é baseado no nome do arquivo e quando ele é paginação, o nome da página permanece o mesmo somente alterados os parâmetros, a menos que usemos url amigável, caso em que cada Paginação poderia ser um nome diferente, embora com um pouco de paciência talvez e nós encontrarmos uma solução para isso.
Você pode gostar também…