Técnica de caché en PHP | Scriptcase Blog - Development, Web Design, Sales and Digital Marketing

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.

Tambien te puede interesar

¿Scriptcase usa MVC?

En la actualidad es habitual la implementación del patrón de arquitectura de software llamado MV...

Cómo Implementar A2F usando un Desarrollo Propio en NodeJS en una aplicación Scriptcase

En un anterior a2f artículo hablamos de Swivel como herramienta externa para integrar nuestras apl...

Deshabilitar el relleno automático y autocompletar: Chrome

Hola, aquí quiero mostrar una alternativa para deshabilitar el relleno automático y el autocomplet...

Comentar este post

Reciba los nuevos post, novedades y ofertas!

Ingresa tu e-mail para recibir orientaciones y asistencia técnica durante el período de evaluación, además de comunicaciones como novedades y ofertas especiales de Scriptcase. Tu información será utilizada de acuerdo con nuestra política de privacidad. Puedes optar por no participar en cualquier momento