Cómo crear un sistema de caché en PHP (simple y dinámico) para acelerar tu sitio web

Mejorar la velocidad de carga de un sitio web no es solo una cuestión técnica: impacta directamente en la experiencia del usuario, el SEO y las conversiones.
Una de las formas más efectivas (y subestimadas) de lograrlo es implementar un sistema de caché en PHP basado en archivos.

En esta guía práctica aprenderás, paso a paso, cómo crear un sistema de caché sencillo y luego llevarlo a un nivel dinámico, ideal para blogs, catálogos o sitios con múltiples URLs, sin necesidad de Redis, Memcached o configuraciones complejas.


¿Qué es un sistema de caché y por qué deberías usarlo?

Un sistema de caché guarda temporalmente el resultado de operaciones costosas, como:

  • Consultas a bases de datos
  • Llamadas a APIs externas
  • Procesamiento de contenido dinámico

En lugar de ejecutar todo ese proceso en cada visita, el servidor lee un archivo ya generado, ahorrando tiempo y recursos.

👉 Resultado: tu sitio carga más rápido y tu servidor trabaja menos.


El concepto básico del caché en PHP

La lógica es sencilla y muy efectiva:

  1. ¿Existe el archivo de caché?
  2. ¿Sigue siendo válido (no ha expirado)?
  3. Si  → se muestra el archivo guardado
  4. Si no → se genera el contenido, se guarda y se muestra

Implementación paso a paso: caché simple en PHP

Configuración inicial

Creamos un archivo llamado cache.php y definimos:

  • El nombre del archivo de caché
  • El tiempo de expiración
<?php
$cache_file = 'cache_index.html'; // Archivo temporal
$cache_time = 60; // Duración del cache en segundos (1 minuto)

// Verificamos si el archivo existe y no ha expirado
if (file_exists($cache_file) && (time() - $cache_time < filemtime($cache_file))) {
    include($cache_file);
    exit;
}

// Si llegamos aquí, generamos contenido nuevo
ob_start(); // Iniciamos el buffer de salida
?>
Lenguaje del código: HTML, XML (xml)

Contenido “pesado” (HTML dinámico)

Aquí va tu código normal, con consultas SQL, lógica compleja o llamadas externas:

<!DOCTYPE html>
<html>
<body>
    <h1>Hola, este es un contenido dinámico</h1>
    <p>La hora actual es: <?php echo date('H:i:s'); ?></p>
    <p>Imagina que esto vino de una base de datos muy lenta...</p>
</body>
</html>
Lenguaje del código: HTML, XML (xml)

Guardar el resultado en caché

Al final del archivo capturamos todo el HTML generado y lo guardamos:

<?php
$content = ob_get_contents();
ob_end_flush(); // Mostramos el contenido al usuario

$fp = fopen($cache_file, 'w');
fwrite($fp, $content);
fclose($fp);
?>
Lenguaje del código: HTML, XML (xml)

¿Por qué usar ob_start() y ob_get_contents()?

Estas funciones son clave para el sistema de caché:

  • ob_start()
    Le dice a PHP: “no envíes nada al navegador todavía, guárdalo en memoria”.
  • ob_get_contents()
    Recupera el HTML final para poder guardarlo en un archivo .html.

Sin esto, no podríamos capturar el contenido dinámico completo.

Caché dinámico: una solución real para blogs y sitios grandes

Usar un solo archivo (cache_index.html) no sirve en un sitio con múltiples páginas.
La solución es generar un archivo de caché por URL.

Identificación única por URL

Usamos $_SERVER['REQUEST_URI'] y lo convertimos en un hash MD5:

<?php
// Configuración
$archivo_original = $_SERVER['REQUEST_URI'];
$cache_id = md5($archivo_original);
$cache_file = "cache/" . $cache_id . ".html";
$cache_time = 3600; // 1 hora

// Verificar si existe el cache
if (file_exists($cache_file) && (time() - $cache_time < filemtime($cache_file))) {
    include($cache_file);
    exit;
}

// Empezar a grabar
ob_start();
?>
Lenguaje del código: HTML, XML (xml)

Al final del archivo:

<?php
$contenido = ob_get_contents();
ob_end_flush();

// Crear carpeta si no existe
if (!is_dir('cache')) {
    mkdir('cache', 0777, true);
}

file_put_contents($cache_file, $contenido);
?>
Lenguaje del código: HTML, XML (xml)

Cache simple vs. cache dinámico

CaracterísticaCache simpleCache dinámico
Uso idealLanding pagesBlogs, tiendas
IdentificadorNombre fijoHash MD5 de la URL
Archivos1Uno por página
FlexibilidadBajaAlta

Si necesitas mejorar el rendimiento de un sitio PHP rápidamente, este sistema de caché por archivos es una solución:

  • Simple
  • Eficiente
  • Escalable
  • Ideal para SEO y experiencia de usuario

Perfecta como primer paso antes de soluciones más avanzadas.

Scroll al inicio