PHP – Memcache – Almacenamiento en caché de HTML

Me gustaría crear un sistema de almacenamiento en caché que evite algunos mecanismos para mejorar el rendimiento.

Tengo algunos ejemplos:

1-) Tengo una página dinámica de PHP que se actualiza cada hora. El contenido de la página es el mismo para cada usuario. Entonces en este caso puedo:

a) crea una página HTML, y esa página se puede generar cada hora. En este caso, me gustaría omitir PHP, por lo que debe haber una página estática y si la base de datos se actualiza, se generará un nuevo archivo HTML. ¿Cómo puedo hacer esto? Puedo crear un script crontab que genere el archivo HTML, pero no parece una forma elegante.

b) almacenar en caché el resultado en la memoria, por lo que el servidor web actualizará el contenido cada hora. Supongo que necesito un módulo de memoria caché para el servidor web. Existe un módulo de memcache no oficial para lighttpd, pero no parece estable, también he escuchado un módulo de memcache para nginx pero no sé si es posible o no. De esta manera parece más elegante y posible, pero ¿cómo? ¿Algunas ideas? (De nuevo, me gustaría evitar PHP en este caso)

Otro ejemplo es que tengo una página dinámica de PHP que se actualiza cada hora, en esa página solo la parte de detalles del usuario es completamente dinámica (por lo que un usuario inicia o cierra sesión y ve su estado en esa sección)

De nuevo, ¿cómo puedo crear un sistema de almacenamiento en caché para esta página? Creo que si puedo encontrar una solución para el primer ejemplo, entonces puedo usar AJAX en esa parte con la misma solución. ¿Estoy en lo correcto?

editar: supongo que no pude aclarar. Me gustaría evitar PHP por completo. El script PHP se ejecutará una vez por hora, después de eso no se realizará una llamada PHP. Me gustaría eliminar su sobrecarga.

Gracias por adelantado,

Ir con HTML estático. Cada hora simplemente actualice un archivo HTML estático con su salida. Deberá usar un cron por hora para ejecutar un script PHP para fopen () y fwrite () en el archivo. No es necesario presionar PHP para recuperar la página en absoluto. Simplemente realice una regla de redirección mod_rewrite .htaccess para esa página en particular para mantener su nomenclatura de URL actual.

Aunque no es muy elegante, el HTML estático con compresión gzip para mí es más eficiente y usaría menos ancho de banda .

Un ejemplo del uso de cron para ejecutar un script PHP por hora:

// run this command in your console to open the editor crontab -e 

Ingrese estos valores:

 01 * * * * php -f /path/to/staticHtmlCreater.php > /dev/null 

La última porción asegura que no tendrá ningún resultado. Este cron se ejecutaría en el primer minuto de cada hora.

ACTUALIZAR

O me perdí la sección relacionada con la información dinámica del perfil de usuario o se agregó después de mi comentario inicial. Si solo está utilizando un solo servidor , le sugiero que realice un cambio a APC, que proporciona tanto el caché de código de operación como un mecanismo de almacenamiento en caché más rápido que el de memcached (para una única aplicación de servidor). Si los datos del perfil del usuario están debajo de la tapa (debajo de la vista de la ventana del usuario), podría esperar para realizar la solicitud AJAX hasta que el usuario se desplace hasta un punto específico. Puede ver esta funcionalidad utilizada en la página de estado de Facebook.

Si se trata de un único servidor web, puede utilizar el módulo APC de PHP para almacenar en caché el contenido de la página. En realidad, no está diseñado para almacenar en caché páginas enteras, pero debería hacerlo en un apuro.

Editar: Olvidé mencionar que APC aún no se envía con PHP, pero se puede instalar desde PECL . Será enviado como parte de PHP 6.

Una buena forma de hacerlo es tener el contenido estático almacenado en un archivo. Las cosas deberían funcionar así:

  • su script PHP se llama
  • si su archivo de contenido se ha modificado hace más de 1 hora (ancho filemtime ($ yourFile))
    • volver a generar contenido + almacenarlo en el archivo + enviarlo de vuelta al cliente
  • más
    • envíe el contenido del archivo como está (con el archivo ($ yourFile), o echo file_get_contents ($ yourFile)

Funciona muy bien en todos los casos, incluso bajo una carga pesada.