Cache max-age
Cache max-age = dependencias temporales
Cache max-age es similar a la directiva max-age en el encabezado HTTP Cache-Control.
¿Por qué?
El max-age de caché proporciona una forma declarativa de crear cachés que dependen del tiempo.
Algunos datos solo son válidos durante un período limitado, en cuyo caso desea especificar un max-age adecuado. Sin embargo, en el núcleo de Drupal 8 no contamos con datos que solo sean válidos por un tiempo limitado; usualmente cacheamos de forma permanente (ver más abajo) y confiamos completamente en las etiquetas de caché para la invalidación.
¿Qué es?
El max-age de caché es un número entero positivo que representa la cantidad de segundos.
El max-age de caché se pasa como un solo número entero, ya que lógicamente un elemento de caché solo puede tener un max-age.
Ejemplos:
- 60 significa cachear durante 60 segundos
- 100 significa cachear durante 100 segundos
- 0 significa cachear por cero segundos, es decir, no cachear
\Drupal\Core\Cache\Cache::PERMANENT
significa cachear para siempre, es decir, solo será invalidado mediante etiquetas de caché. (En otras palabras: ∞ o segundos infinitos.)
Por lo tanto, si desea evitar cachear un bloque renderizado, debe establecer para él max-age = 0.
Ejemplo para la mayoría de los arrays de renderizado:
$build['#cache']['max-age'] = 0;
Ejemplo en una función:
\Drupal::cache()->set('my_cache_item', $school_list, REQUEST_TIME + (86400));
Si desea cambiar el max-age de un bloque a 0, debe implementar el método getCacheMaxAge
.
Limitaciones del max-age
Desafortunadamente, el max-age no funciona para usuarios anónimos ni para el módulo Page Cache del núcleo de Drupal. Por ejemplo, vea estos issues:
- #2352009: [pp-3] Propagar max-age de elementos a los encabezados de página y cache de página
- #2449749: Añadir #cache['downstream-ttl'] para forzar expiración en cierto tiempo y corregir la lógica de #cache['max-age'], añadiendo #cache['age']
- #2835068: PageCache cachea respuestas no cacheables (violando especificaciones HTTP/1.0) + D8 deshabilita intencionalmente proxy HTTP/1.0 = WTF
- #2951814: Siempre establecer encabezados X-Drupal-Cache y X-Drupal-Dynamic-Cache, incluso para respuestas no cacheadas
Mientras estos (y posiblemente otros) problemas no estén resueltos, tenga en cuenta que establecer el max-age para un array de renderizado incluido en una página no es suficiente para que los usuarios anónimos vean la nueva versión tras expirar el max-age. Mientras tanto, el módulo Cache Control Override intenta mitigar estos problemas. También puede ayudar establecer una etiqueta de caché personalizada en páginas con contenido dependiente del tiempo y invalidar esas etiquetas manualmente mediante hook_cron()
. ¡Buena suerte!
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.