Drupal → Оптимизация кэширования больших меню

08.03.2020

Всем блокам меню друпал добавляет кэш-контекст route.menu_active_trails, который создаёт новый кэш блока в зависимости от активной ссылки (т.е. если меню содержит сто ссылок, то по итогу в cache_render будет 101 вариант этого блока).

Если меню достаточно большое и все пункты в нём раскрыты по умолчанию, то можно безболезненно удалить этот кэш-контекст, позволив держать в кэше только одну версию блока.

Пример для меню main:

/**
 * Implements hook_block_build_BASE_BLOCK_ID_alter(): system_menu_block.
 */
function MODULENAME_block_build_system_menu_block_alter(array &$build, BlockPluginInterface $block) {
  if ($block->getDerivativeId() == 'main') {
    $build['#cache']['contexts'] = array_diff($build['#cache']['contexts'], ['route.menu_active_trails:' . $block->getDerivativeId()]);
  }
}
Написанное актуально для
Drupal 8
Похожие записи

Добавить комментарий