Skip to Content »

Cache de páginas en PHP

  • 23/04/2008
  • 12:27 am
  • unijimpe

Una de las técnicas mas utilizadas para optimizar los recursos de un servidor web es el uso de cache de páginas, esto es crear copias estáticas de nuestras páginas dinámicas para posteriormente entregárselas al usuario, con esto solo la primera vez en la que se genera nuestra copia cache se harán las consultas a base de datos, cálculos, procesamiento, entre otros de nuestra web, en las siguientes ocasiones al usuario se le entregará la copia cache con lo cual ahorramos recursos de servidor.

Créditos
Este ejemplo esta basado en el articulo Caching of output in PHP escrito por Dave Child, al cual le hize algunas modificaciones con el objeto de ser mas didáctico.

Funcionamiento
Para hacer cache de nuestras páginas utilizaremos dos archivos cache.start.php que verificará si existe una copia en cache de la pagina en cuyo caso lo mostrará al usuario y cache.end.php que se encargará de crear el cache del página seleccionada.

Escribiendo los scripts
Entonces lo primero es crear el archivo cache.start.php en donde primero definimos la carpeta donde guardaremos los archivos de cache, el tiempo de expiración de estos archivos y la extensión de estos archivos. El siguiente paso es crear el nombre del archivo, esto lo hacemos basado en el nombre original del archivo y aplicándole encriptación MD5.

  1. <?php
  2. // Settings
  3. $cachedir = 'cache/';   // directorio de cache
  4. $cachetime = 86400;   // duración del cache
  5. $cacheext = 'cache';   // extensión de cache
  6. // script a procesar
  7. $cachepage = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  8. $cachefile = $cachedir.md5($cachepage).'.'.$cacheext;
  9. // calculamos el tiempo del cache
  10. if (@file_exists($cachefile)) {
  11.     $cachelast = @filemtime($cachefile);
  12. } else {
  13.     $cachelast = 0;
  14. }
  15. // Mostramos el archivo si aun no vence
  16. if (time() - $cachetime <$cachelast) {
  17.     @readfile($cachefile);
  18.     exit();
  19. }
  20. ?>

Notar que si el archivo aun no ha expirado, le mostramos al usuario la copia que tenemos en cache y cancelamos la ejecución del resto del script.

El siguiente paso es crear el archivo cache.end.php, este archivo se ejecutará si y solo asi el script llega al final, lo cual indica que aun no tiene una copia en cache, para ello creamos el archivo y dentro del mismo escribimos el contenido del buffer.

  1. // Generamos el nuevo archivo cache
  2. $fp = @fopen($cachefile, 'w');
  3. // guardamos el contenido del buffer
  4. @fclose($fp);

Modo de Utilización
El uso de este método de cache es sencillo, primer debemos crear la carpeta donde se guardarán los archivos de cache y luego incluir cache.start.php al inicio y cache.end.php al final del script a procesar.

  1. <?php include("cache.start.php"); ?>
  2. ...
  3. </html>
  4. <?php include("cache.end.php"); ?>

Pueden ver un ejemplo funcionando en /caching/php-mysql.php el cual devuelve registros de una base de datos. Este sencillo script no permitirá optimizar el rendimiento de nuestras paginas dinámicas, no evitaremos múltiples conexiones a base de datos y calculo repetitivo, esto es muy útil sobre todo si utilizamos hosting compartido.

Posts Relacionados

Total de Comentarios: 3

Publicidad
23/04/2008
12:22 pm

Muy interesante realmente muy interesante, se agradece.

24/04/2008
10:13 pm

Ya existen sistemas de cache mucho mejor con Templates el oficial de la gente que trabaja en php http://smarty.php.net
Otras altenativas
http://www.phpxtemplate.org

jj
25/04/2008
9:47 am

lo siento, no entiendo cual es cada fichero. Podrías poner para descarga los ficheros start/end…gracias?

saludos!

Enviar Comentario

(*)

(*)