Cuando desarrollamos sitios web PHP desde cero y sin frameworks, la velocidad suele ser un problema. Los sistemas de caché son extremadamente útiles para acelerar las páginas web desarrolladas con PHP.
En este artículo, te mostraré cómo crear un sistema de almacenamiento en caché PHP simple para tus páginas web.
¿Qué es un sistema de caché?
El cacheo de páginas es una técnica que busca crear una colección de datos duplicados cuando los datos originales son caros de extraer o computar (generalmente en términos de tiempo de acceso).
Como PHP es un lenguaje de programación interpretado, el servidor debe ejecutar el código cada vez que se solicita una página PHP. Dependiendo de la complejidad y la longitud del script, esta operación puede llevar tiempo y demandar muchos recursos. Si tu sitio web cuenta con mucho tráfico, realmente puede ralentizar el servidor y, por ende, tu sitio.
Si una página web se almacena en caché, el script verificará si existe el archivo de caché relacionado. Si existe, el archivo estático en caché se enviará al navegador del usuario. De lo contrario, se creará automáticamente una versión estática de la página dinámica la primera vez que la solicite un visitante.
Al crear una versión estática de páginas dinámicas, el sistema de almacenamiento en caché ahorra muchos recursos del servidor ya que el script PHP solo se ejecutará una vez, en lugar de ejecutarse cada vez que se solicite la página.
Los archivos de caché tienen una vida útil específica, establecida por el desarrollador. Si se excede el tiempo de vida definido, el servidor ejecutará el script PHP y posteriormente generará una nueva versión en caché del mismo.
Una vez visto esto, vamos a ver cómo crear un sistema de caché sencillo, pero eficiente.
Crea el archivo top-cache.php
Necesitamos crear dos archivos. El primero se llamará top-cache.php y contará con este código:
<?php $url = $_SERVER["SCRIPT_NAME"]; $break = explode('/', $url); $file = $break[count($break) - 1]; $cachefile = 'cached-'.substr_replace($file ,"",-4).'.html'; $cachetime = 18000; // Servimos de la cache si es menor que $cachetime if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) { echo "<!-- Cached copy, generated ".date('H:i', filemtime($cachefile))." -->n"; readfile($cachefile); exit; } ob_start(); ?>
¿Qué hace este código? Las primeras 5 líneas crean el nombre del archivo en caché de acuerdo con el archivo PHP actual. Es decir, si estás utilizando un archivo llamado list.php, la archivo estático creado por el sistema de caché se llamará cached-list.html.
La línea 6 crea una variable $cachetime que determina la vida de nuestra caché.
Las líneas 9 a 13 son una declaración condicional que busca un archivo de caché llamado $cachefile. Si encuentra el archivo, se inserta un comentario (línea 10) y se incluye el archivo $cachefile. Después, el exit detiene la ejecución del script y el archivo se envía al navegador del usuario. Lo que significa que si existe el archivo estático, el servidor no interpreta PHP.
La línea 14 crea un búfer si no existe el archivo $cachefile.
Crea el archivo bottom-cache.php
Ahora, crea otro nuevo archivo PHP llamado bottom-cache.php y pega el siguiente código en él.
<?php // Crea el archivo de cache $cached = fopen($cachefile, 'w'); fwrite($cached, ob_get_contents()); fclose($cached); ob_end_flush(); // Envia la salida al navegador ?>
Si el archivo en caché al que hace referencia $cachefile no se encuentra en el servidor, este código se ejecutará y creará el archivo de caché en sí.
Como resultado, la próxima vez que se solicite la página, el archivo estático $cachefile se servirá al navegador del usuario en lugar de ejecutar todo el archivo PHP.
Incluye archivos de caché en tu página
Ahora que has creado los dos archivos necesarios, simplemente debes incluirlos en la página PHP que desees almacenar en caché.
Como probablemente hayas adivinado, el archivo top-cache.php debe incluirse al comienzo de tu página PHP y el archivo bottom-cache.php al final, como se muestra a continuación:
<?php include('top-cache.php'); // tu codigo PHP iria aqui include('bottom-cache.php'); ?>
Ahora, si pruebas la caché en una página lenta, te sorprenderás de lo rápida que es la página. Este sencillo sistema de caché de PHP es mi solución favorita cuando trabajo en sitios web desarrollados en PHP desde cero.