Cache Context and Tags

3 minutos

En Drupal 10, el sistema de caché es fundamental para mejorar el rendimiento de tu sitio web. Dos conceptos clave en este sistema son los contextos de caché y las etiquetas de caché. Vamos a explorar qué son y cómo se utilizan.

Contextos de Caché (Context)

Los contextos de caché en Drupal determinan las variaciones en el contenido almacenado en caché. Estos son útiles cuando quieres que el contenido varíe según ciertos factores, como el usuario que está viendo la página o el idioma seleccionado.

Etiquetas de Caché (Tags)

Las etiquetas de caché se utilizan para invalidar el contenido en caché cuando ocurren cambios relevantes. Esto asegura que los usuarios siempre vean la información más actualizada.

Casos de Uso:

  • Contenido dependiente del usuario: Usa el contexto de caché 'user' para contenido que cambia según el usuario que lo ve.
  • Contenido multilingüe: Utiliza el contexto 'languages' para asegurarte de que el contenido se almacene en caché por separado para cada idioma.
  • Listados de contenido: Usa etiquetas como 'node_list' para invalidar listas de contenido cuando se agregan o eliminan nodos.
  • Bloques personalizados: Aplica etiquetas específicas a bloques para invalidarlos cuando se actualiza su contenido.

Combinemos estos dos conceptos en un bloque para que puedas entenderlo mejor, el siguiente es el código de un bloque que puedes mostrar en todos los contenidos, este bloque saluda al usuario y le dice que contenido está viendo, seguramente un bloque así no es muy útil, pero para este ejemplo puede funcionar:

<?php

namespace Drupal\my_module\Plugin\Block;

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Cache\Cache;

/**
 * Provides a custom block with cache contexts and tags.
 *
 * @Block(
 *   id = "my_custom_block",
 *   admin_label = @Translation("My Custom Block"),
 * )
 */
class MyCustomBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    $node = \Drupal::routeMatch()->getParameter('node');
    $user = \Drupal::currentUser();

    $node_title = $node ? $node->getTitle() : $this->t('No node');

    $build = [
      '#markup' => $this->t('Hello, @user! You are viewing: @title', [
        '@user' => $user->getDisplayName(),
        '@title' => $node_title,
      ]),
      '#cache' => [
        'contexts' => [
          'user',
          'route.node',
        ],
        'tags' => $node ? ['node:' . $node->id()] : [],
        'max-age' => Cache::PERMANENT,
      ],
    ];

    return $build;
  }

}

Que está pasando y como se está configurando el caché:

  • Método build(): Este método construye el contenido del bloque.
  • Obtención de datos:
    • Se obtiene el nodo actual de la ruta.
    • Se obtiene el usuario actual.
    • Contenido del bloque: Se crea un mensaje que incluye el nombre del usuario y el título del nodo.
  • Caché: Se configuran los ajustes de caché:
    • Contextos: 'user' y 'route.node' para variar el contenido por usuario y nodo.
    • Etiquetas: Se usa la etiqueta del nodo actual para invalidar la caché cuando el nodo se actualiza, esto será útil si el título del nodo cambia.
    • Max-age: Se establece como permanente.
  • Renderizado: El método devuelve un arreglo renderizable con el markup y la configuración de caché.

Conclusión

Entender y utilizar correctamente los contextos y etiquetas de caché en Drupal 10 te permitirá crear sitios web más rápidos y eficientes, asegurando que el contenido correcto se muestre a los usuarios adecuados en el momento oportuno.

Jidrone Drupal Developer
J. Ivan Duarte
Drupal Senior Developer

Share