Técnica de caché en PHP

En este ejemplo vamos a comprobar la optimización real utilizando un pequeño script en PHP para generar un archivo de caché mediante código, aunque existen muchas maneras y técnicas, hoy analizaremos una de ellas.

El objetivo es crear archivos HTML puros y estáticos, entiéndase que nos referimos a puros y estáticos a aquellas páginas cuyo contenido permanecen invariables y formateadas con tags html.

En cambio una página de contenido dinámico es aquella que a partir de scripts PHP pueden eventualmente contener: largos y complejos procesos, interacción y consultas a base de datos, entre otras cosas más, que finalmente son estas las que condicionan y presentan su contenido, incluso pueden variar entre una petición y otra; por lo que el objetivo es optimizar una página de contenido dinámico pero que una vez creado dicho contenido no necesita la generación constante del mismo.

Si necesitásemos que el contenido sea ciento por ciento en tiempo real y que constantemente varíe, el caché en este caso, no es una opción recomendable ni útil, la intensión es “cachear” páginas con contenidos que pueden de alguna u otra manera tardar N segundos en refrescarse y que en peticiones distintas queda invariable por algún tiempo.

Al generar archivos HTML estaremos protegiendo el desgaste innecesario de los recursos del servidor, y obviamente optimizamos el rendimiento general: recursos vs resultados, entiéndase que al consumir directamente HTML estaríamos logrando: menos consultas a Base de datos, menos procesos, finalmente esto se reflejará en menos desgaste en general de nuestro servidor web

Para optmizar debemos tener una métrica inicial

Bueno, es lo que tenemos que hacer, primeramente “medir” el tiempo de ejecución de un script sin cache, puede ser toda una página o parte del script (entiéndase que cuando decimos páginas nos referimos al documento individual pues, muchas personas podrían referirse erróneamente como página a un sitio).

Para tener una métrica inicial utilizaremos el siguiente código

Si es una pagina con contenido estático no tiene sentido usar esta técnica de caché.

<?php
 $comienzo= microtime(true);  //al inicio del archivo
 ?>

Luego usamos todo el código presente en la página, sean estas: PHP, HTML, CSS y/o Javascript, dependiendo del proyecto.

Y al final de todo colocaremos lo siguiente.

<?php

/*—————-Fin Código———————–*/

$final= microtime(true);  //al final del archivo

echo  “Tiempo: “. number_format($final-$comienzo,4).”  segundos.”;

?>

Ahora tendremos documentado el tiempo de ejecución inicial, debemos guardar esa información como base para el análisis.

Seguidamente crearemos dos nuevos archivos.

top_cache.php
 
 <?php

$comienzo= microtime(true); //al inicio del archivo

$url = $_SERVER[“SCRIPT_NAME”]; //obtenemos el nombre la url y nombres de archivo actual

$break = explode(‘/’, $url); //dividimos las uniones por / y obtenemos una matriz de datos

$file = $break[count($break) – 1]; //obtenemos el nombre real del archivo



$cachefile = ‘cached-‘.substr_replace($file ,””,-4).’.html’; //creamos un nombre nuevo para el caché, este será HTML para optimizar recursos

$cachetime = 900; //seteamos el tiempo de duración de la caché en segundos | 900/60 = 15 minutos

// Servir desde la cache si es más actual que $cachetime

if (file_exists($cachefile) && time() – $cachetime < filemtime($cachefile)) {

echo “<!– Copia en cache generada “.date(‘H:i’, filemtime($cachefile)).” –>\n”;

include($cachefile);

$final= microtime(true); //al final del archivo

echo “<div>Nuevo tiempo: “. number_format($final-$comienzo,4).” segundos.</div>”;

exit;

}

ob_start(); // Crear buffer de salida

?>
bottom_cache.php
 
 <?php

// Cachear el contenido del fichero

$cached = fopen($cachefile, ‘w’); //toma el nombre del archivo caché que creamos en topo_cache si no existe o si ya pasó su vida útil

fwrite($cached, ob_get_contents()); //escribe todo el contenido del archivo actual

fclose($cached);

ob_end_flush(); // Enviar el navegador

?>

Este archivo top_cache.php debo incluirlo en la primera línea de mi página a “cachear” y bottom_cache.php al final.

 <?php  include "top_cache.php"; ?>

Aquí va el código PHP, HTML, css, etc.

 
 <?php include "bottom _cache.php"; ?>

En nuestras pruebas se notó la mejoría a un 50% pero extrañamente recién a partir de la tercera llamada a la página cacheada; esto no funciona correctamente cuando existe paginación de por medio pues, esto está basado en el nombre del archivo y cuando es paginación, el nombre de la página sigue siendo la misma solo cambian los parámetros, a no ser que usemos url amigables en cuyo caso cada paginación podría ser un nombre distinto, aunque con un poco de paciencia quizás y encontremos una solución a eso.

You might also like…

Como funcionan las carpetas de Scriptcase

Como desarrolladores en Scriptcase es conveniente conocer el entorno a detalle todo en ambiente, en...

Te pagan por tu sistema no por el código

En el mundo empresarial el tiempo es un factor determinante, dado que puede provocar ganancias o ta...

Más novedades sobre la versión 9.4

Recientemente se lanzó la versión 9.4 que trae un nuevo concepto de diseño a las aplicaciones ge...

You might also like…

Get new posts, resources, offers and more each week.

We will use the information you provide to update you about our Newsletter and Special Offers. You can unsubscribe any time you want by clinck in a link in the footer of any email you receive from us, or by contacting us at sales@scriptcase.net. Learn more about our Privacy Police.