2010-07-29

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.

  1. // iniciar el buffer de salida
  2. ob_start();
  3. //Aqui pones tu codigo HTML y PHP
  4. $cachefile = "cache/home.html";
  5. $fp = fopen($cachefile, 'w');
  6. fwrite($fp, ob_get_contents());
  7. fclose($fp);
  8. 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.

  1. $cachefile = "cache/home.html";
  2. if (file_exists($cachefile)) {
  3. include($cachefile);
  4. exit;
  5. }

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.

  1. $cachetime = 5 * 60;
  2. if (file_exists($cachefile) &&
  3. (time() - $cachetime < filemtime($cachefile)))
  4. {
  5. include($cachefile);
  6. echo "n";
  7. exit;
  8. }

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

  1. $cachefile = "cache/".$reqfilename.".html";
  2. $cachetime = 5 * 60; // 5 minutes
  3. if (file_exists($cachefile) && (time() - $cachetime
  4. < filemtime($cachefile)))
  5. {
  6. include($cachefile);
  7. echo "n";
  8. exit;
  9. }
  10. ob_start();
  11. //.. Your usual PHP script and HTML here ...
  12. $fp = fopen($cachefile, 'w');
  13. fwrite($fp, ob_get_contents());
  14. fclose($fp);
  15. ob_end_flush();

Original de: The UK Web Design Company

Fuente: Link

No hay comentarios: