Вы можете исключить блок из BigPipe, отключив плейсхолдер в сборке блока (предварительная обработка слишком запоздала).
/**
* Реализует hook_block_build_BASE_BLOCK_ID_alter().
*/
function mymodule_block_build_example_block_alter(массив &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
// Отключить заполнение этого блока.
$build['#create_placeholder'] = ЛОЖЬ;
}
Но если это один из блоков, всегда имеющих задержку, это может сделать весь модуль BigPipe бесполезным.
Вы можете решить смещение контента в CSS. Задержите или остановите рендеринг блока (в этом случае вы можете использовать предварительную обработку) и заполните пробел в частично загруженной странице с помощью CSS.
Или сделайте блок заголовка более детализированным. Когда все динамические части заполнены, остальная часть блока кэшируется и загружается вместе с начальной загрузкой страницы.
Пример блока:
общедоступная функция сборки () {
$сборка = [];
$сборка[] = [
'#markup' => '<p>Статическая часть блока, загружается вместе с начальной страницей.</p>',
];
$сборка[] = [
'#lazy_builder' => ['\Drupal\mymodule\LazyBuilders::getUser', []],
'#cache' => ['contexts' => ['user']],
// контексты user, session или max-age 0 автоматически замещаются
];
вернуть $сборку;
}
/src/LazyBuilders.php:
<?php
пространство имен Drupal\mymodule;
используйте Drupal\Core\Render\Element\RenderCallbackInterface;
класс LazyBuilders реализует RenderCallbackInterface {
общедоступная статическая функция getUser() {
возвращаться [
'#markup' => \Drupal::currentUser()->getDisplayName(),
];
}
}