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.
¡Visite nuestro blog y vea más artículos! También disfruta y conoce Scriptcase.
También podría gustarte…