viernes, 20 de mayo de 2011

Cachear una página dinámica PHP

El sistema es bastante simple y en principio se podría aplicar a cualquier sitio. El código sería algo tal que este:

<?php
       $md5 = md5($_SERVER["REQUEST_URI"]); // convertimos la URL a único identificador
       $file = "cache/".$md5.".html"; // donde se guardará el fichero
       $hora = filemtime($file); // comprobamos la hora del fichero si ya existiera
       if(time() <= $hora+86400) { // asignamos un tiempo de cache de 86400 segundos
              include($file); // incluimos el contenido del fichero cacheado
              echo "<!-- ".date('YmdHis', $hora)." -->"; // (opcional) añadimos al pie de página la fecha-hora de la caché
              exit; // salimos
       }
       ob_start(); // abrimos la memoria
?>

AQUI VA LA WEB NORMAL

<?php
       $fp = fopen($file, 'w+'); // abrimos el fichero de caché
       fwrite($fp, ob_get_contents()); // guardamos el contenido de la página generada en el fichero
       fclose($fp); // cerramos el fichero
       ob_end_flush(); // devolvemos la página que se ha generado y cerramos la memoria
?>

Con este sistema podremos incrementar una página dinámica tranquilamente entre un 50% y un 1.000% la velocidad, dependiendo de la carga de base de datos o cálculo que tuviera anteriormente.