Drupal

Cache en Drupal 8

La caché es la parte importante de un proceso de desarrollo. Todos usamos caché, pero no todo el mundo es capaz de manejarlo. Vamos a echar un vistazo a lo que es una caché y cómo se puede utilizar para su pagina web en Drupal 8. También entraremos en detalles y hablaremos de la API de la caché, auto-placeholdering y el módulo BigPipe.

Drauta agencia digitalDrauta

cache drupal 8

¿Que es una cache?

Una caché es un hardware o un componente de software que almacena las páginas solicitadas con frecuencia o las partes de las páginas, y estas páginas se pueden mostrar a los usuarios con menos tiempo y con una velocidad más rápida de lo habitual.

¿Qué sucede con la página mientras se está cargando? Se activan las funciones del sistema y los archivos de todos los módulos, se inicializan los ajustes y las variables, se carga un tema y se implementan. Cuando se habilita la caché, se carga la configuración básica del sistema y la página se carga desde la memoria caché. Obviamente, en este caso la página se carga más rápido.

La caché es el componente importante de la optimización de sitios. Es uno de los elementos clave en la evaluación de la aplicación Google PageSpeed.

Cache en Drupal 8

¿Qué pasa con la caché y la optimización en Drupal 8?

De forma predeterminada, Drupal 8 habilita dos módulos: caché de página interna y caché de página dinámicas internas. Caché de página interna almacena caché las páginas para usuarios anónimos. El caché de páginas dinámicas interno almacena en caché el contenido de la página, excepto las piezas personalizadas, para que puedan utilizarse para los usuarios anónimos y autorizados. Cada objeto de la página contiene metadatos, y esta pieza de metadatos indica al módulo de caché de página dinámica interna si tiene que almacenar la página en caché o no. Puede cambiar los metadatos predeterminados por la API de caché.

API de caché Drupal 8

Las propiedades de ensamblaje se pueden establecer en cualquier objeto. Una caché tiene 3 propiedades. Si desea cambiar la configuración predeterminada de caché, puede usarlas. Estas propiedades son las siguientes.

Contexto es una dependencia de caché en el contexto, que crea variaciones cuando se generan las matrices de procesamiento. Por ejemplo, una página para dos usuarios diferentes puede parecer diferente. En este caso, el contexto es el usuario. Estos contextos pueden ser los permisos de usuario, la configuración de idioma o los parámetros de URL.

Las etiquetas definen de qué objeto depende la caché. Utilizando etiquetas de caché puede invalidar automáticamente las páginas almacenadas en caché.

Max-age es el tiempo máximo que se almacena la memoria caché.

'#cache' => [
  'contexts' => ['languages', 'timezone'],
  'tags' => ['node:5', 'user:3'],
  'max-age' => Cache::PERMANENT,
],

Al construir cualquier objeto, puede cambiar la configuración de la caché para hacerlo más flexible. Es necesario configurar la configuración en la representación.

En la práctica, se ve así:

$renderer = \Drupal::service('renderer');

$config = \Drupal::config('system.site');
$current_user = \Drupal::currentUser();

$build = [
  '#prefix' => '',
  '#markup' => t('Hi, %name, welcome back to @site!', [
    '%name' => $current_user->getUsername(),
    '@site' => $config->get('name'),
  ]),
  '#suffix' => '',
  '#cache' => [
    'contexts' => [
      'user',
    ],
  ],
];
$renderer->addCacheableDependency($build, $config);
$renderer->addCacheableDependency($build, \Drupal\user\Entity\User::load($current_user->id()));

Además, puede obtener parámetros de almacenamiento en caché de una entidad mediante un método estándar:

\Drupal::entityManager()->getDefinition('node')->getListCacheContexts();
$view->getEntityType()->getListCacheTags();
$node->getEntityType()->isRenderCacheable();

Marcado automático

Para obtener la mejor capacidad de almacenamiento en caché de las partes altamente dinámicas de una página, puede utilizar el marcado automático. Para ello utilice una devolución de llamada #lazy_builder:

$build[$id]['links'] = array(
  '#lazy_builder' => [
    'comment.lazy_builders:renderLinks',
    [
      $entity->id(),
      $view_mode,
      $entity->language()->getId(),
      !empty($entity->in_preview),
    ]
  ],
  '#create_placeholder' => TRUE,
);

Drupal genera marcadores de posición para contenido dinámico, y sólo en el último momento se sustituye por contenido real. Esto permite que el módulo de caché de página dinámica interna procese los fragmentos de caché excepto las partes de la página que son demasiado dinámicas para el almacenamiento en caché.

BigPipe, modulo cache Drupal

Pero tenemos un problema: Drupal muestra una página completa a la vez. Un usuario espera que se carguen todas las partes de la página. Para solucionar este problema BigPipe ha sido desarrollado. Es un módulo experimental, que se puede ver en la versión 8.1 de Drupal.

Como se vio en el video, la magia de BigPipe hace es aumentar la velocidad a través de la carga de las partes en caché de la primera página y mostrarlos tan pronto como estén listos. La última a cargar son las partes dinámicas de la página.

Conclusión

Una caché es la parte importante de la optimización de paginas web. Si desea que sus usuarios obtengan páginas lo más rápido posible, active la caché. En Drupal 8 el almacenamiento en caché se ha mejorado considerablemente. Si quieres que tu sitio funcione más rápido y sabes cómo hacerlo, entonces únete al desarrollo del módulo BigPipe, escribe tu problema en drupal.org acerca de caché, hazte miembro activo de la comunidad. Juntos somos más fuertes y podríamos contribuir de manera más significativa.

¿Quieres empezar un nuevo proyecto con nosotros?

¿Necesitas servicios para tu web? Descubre como te podemos ayudar y no dudes en contactar con nosotros.