Caché solo parte de una página en PHP

¿Es posible almacenar en caché solo una parte específica de una página en PHP, o el resultado de una sección específica de código en el script PHP? Parece que cuando bash almacenar en caché una página en particular, almacena en caché toda la página que no quiero, algo del contenido de mi página debe actualizarse con cada carga de página mientras que otras (como una lista desplegable con datos de una base de datos) ) solo necesita ser actualizado cada hora más o menos.

Zend_Cache

Probablemente usaría la biblioteca Zend Frameworks Zend_Cache para esto.

Puede usar este componente sin la necesidad de utilizar todo el marco.

Acceda a la página de descarga de Zend Framework y obtenga la última.

Después de haber descargado los archivos centrales, deberá incluir Zend_Cache en su proyecto. Zend_Cache documentos.

¿Has decidido cómo quieres almacenar tus datos en caché? ¿Estás usando un sistema de archivos? ¿O eres Memcache? Una vez que sepa cuál va a utilizar, deberá usar un servidor Zend_Cache específico.

Zend_Cache Backends / Zend_Cache Frontends

  • Necesita usar un back-end (cómo está almacenando en el almacenamiento en caché qué es lo que quiere almacenar en caché) y
  • Necesita utilizar un frontend (cómo desea almacenar en caché … como utilizar un búfer o resultados de la función de almacenamiento en caché, etc.)

Documentación de back-end : Zend_Cache Backends Documentación de front – end : Zend_Cache Frontends

Entonces harías algo como esto …

  array( array( 'host' => '127.0.0.1', 'port' => '11211' ) ), 'compression' => true ) ); // configure caching frontend strategy $frontend = new Zend_Cache_Frontend_Output( array( 'caching' => true, 'cache_id_prefix' => 'myApp', 'write_control' => true, 'automatic_serialization' => true, 'ignore_user_abort' => true ) ); // build a caching object $cache = Zend_Cache::factory( $frontend, $backend ); 

Esto crearía un caché que hace uso de los mecanismos de caché Zend_Cache_Frontend_Output .

Para usar Zend_Cache_Frontend_Output que quiere quiere, sería simple . En lugar del núcleo, usaría la output . Las opciones que pasas son idénticas. Entonces para usarlo, usted:

Zend_Cache_Frontend_Output – Uso

 // if it is a cache miss, output buffering is triggered if (!($cache->start('mypage'))) { // output everything as usual echo 'Hello world! '; echo 'This is cached ('.time().') '; $cache->end(); // output buffering ends } echo 'This is never cached ('.time().').'; 

Blog útil: http://perevodik.net/es/posts/14/

Lo siento, esta pregunta tomó más tiempo de lo esperado y se han escrito muchas respuestas. ¡Lo veo!

Si está hablando de almacenamiento en caché por el navegador (y cualquier proxy con el que pueda interactuar), entonces no. El almacenamiento en caché solo tiene lugar en recursos HTTP completos (es decir, en base a URI).

Dentro de su propia aplicación, puede almacenar en caché los datos para que no necesite (por ejemplo) acceder a la base de datos en cada solicitud. Memcached es una forma popular de hacer esto.

Podría pasar su propio almacenamiento en caché con ob_start (), ob_end_flush () y funciones similares. Reúna el resultado deseado, deposítelo en algún archivo o base de datos y lea más tarde si las condiciones son las mismas. Normalmente construyo la sum de md5 del estado y la restauro más tarde.

Depende de qué tecnologías de visualización y almacenamiento en caché está utilizando. En términos generales, sí, puedes hacer algo como esto:

 // if it is a cache miss, output buffering is triggered if (!($cache->start('mypage'))) { // output everything as usual echo 'Hello world! '; echo 'This is cached ('.time().') '; $cache->end(); // output buffering ends } echo 'This is never cached ('.time().').'; 

tomado de la documentación de Zend_Cache .

De lo contrario, en su ejemplo, siempre puede hacer una función que devuelve la lista desplegable e implementar el mecanismo de caché dentro de esa función. De esta forma, su página ni siquiera es consciente del almacenamiento en caché.