Cache de páginas con PHP

Para muchos sitios Web que utilizan la potencia de PHP, MySQL o alguna otra base de datos, siempre que carga una página realizan consultas a la DB y su debido procesamiento con el lenguaje de programación, en este caso PHP.

Para las páginas con poco cambio de contenidos como blogs por ejemplo, difícilmente editaríamos un Post cada rato, seria de gran utilidad y rendimiento ponerle cache.

Ejemplo de petición

Este grafico nos muestra como se realiza todo el proceso para mostrar el contenido al usuario que esta realizando una petición mediante Internet:

  • Primero se conecta a la base de datos.
  • Luego procesa las noticias para mostrarlas
  • Finalmente lee una plantilla para reemplazar variables y mostrar las noticia.

Para optimizar la rapidez de respuesta del servidor al usuario, se arma el cache con la ultima consulta que realizo el usuario, de este modo se obviarían los pasos que mencionamos anteriormente.

Este grafico muestra el proceso que se realizaría si la página tuviera u archivo cache.

Este script realiza esta función de guardar en cache toda la respuesta en html, para esto se debió crear una carpeta “cache/” con permisos de escritura, donde se almacenaran los archivos.

// iniciar el buffer de salida
ob_start();

//Aqui pones tu codigo HTML y PHP

$cachefile = "cache/home.html";
$fp = fopen($cachefile, 'w'); 
fwrite($fp, ob_get_contents()); 
fclose($fp); 
ob_end_flush(); 

Esta función nos guardara el archivo, ahora debemos tener un script que compruebe que existe cache para evitar la interacción con la DB.

$cachefile = "cache/home.html";

if (file_exists($cachefile)) {
	include($cachefile); 
	exit;
}

Agregar un tiempo de expiración para las páginas cache.

No es recomendable dejar una pagina con cache de por vida, para esto tenemos que darle un tiempo determinado y que renueve su información con datos más actuales.

$cachetime = 5 * 60; 

if (file_exists($cachefile) && 
   (time() - $cachetime < filemtime($cachefile))) 
{
      	include($cachefile);
       	echo "n";
       	exit;
}

Esta seria la forma en que podría quedar el proceso para armar y consultar una pagina cache.

$cachefile = "cache/".$reqfilename.".html";
$cachetime = 5 * 60; // 5 minutes

if (file_exists($cachefile) && (time() - $cachetime
< filemtime($cachefile))) 
{
    include($cachefile);
    echo "n";
    exit;
}
ob_start();

//.. Your usual PHP script and HTML here ...

$fp = fopen($cachefile, 'w'); 

fwrite($fp, ob_get_contents());
fclose($fp); 
ob_end_flush(); 

Original de: The UK Web Design Company

También te puede interesar

2 Comments

  1. caos30
    oct 02, 2009 @ 11:56:37

    No está nada mal. Precisamente yo estoy trabajando un método parecido pero que no hace uso del “tiempo” sino que el CMS borra todo lo que haya en cache siempre que haya una escritura en la base de datos (puesto que uso un archivo que hace de “capa superior” de la base de datos). De esta forma, me sirve para cualquier tipo de sites (es que me he programado mi propio CMS): si el site no tiene nunca escritura en base de datos, pues la cache durará eternamente. Pero si el site tiene cambios una vez cada tantas horas, entonces la cache se irá regenerando más a menudo ;)

    No es un método ideal, pero creo que es preferible a la regeneración por tiempo. Sobretodo, en cuanto hay bastantes módulos, bloques, gadgets, etc… que hacen un uso complejo de la base de datos.

    Ah, por cierto y para los “novatos”: cuidado con las llamdas POST!!!

  2. Acelerar el tiempo de carga de nuestro blog | Craftyman Blog
    ene 08, 2010 @ 09:07:37

    [...] Este tutorial te enseñara paso paso como implementarlo en tu pagina web. [...]