Puteți exclude un bloc din BigPipe dezactivând substituentul în construcția blocului (preprocesarea este prea târziu).
/**
* Implementează hook_block_build_BASE_BLOCK_ID_alter().
*/
function mymodule_block_build_example_block_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
// Dezactivează substituentul acestui bloc.
$build['#create_placeholder'] = FALS;
}
Dar dacă acesta este unul dintre blocurile care are întotdeauna o întârziere, ar putea face întregul modul BigPipe inutil.
Puteți rezolva schimbarea conținutului în CSS. Întârzieți sau opriți redarea blocurilor (în acest caz puteți utiliza preprocesul) și umpleți golul din pagina încărcată parțial cu CSS.
Sau faceți blocul antetului mai granular. Când toate părțile dinamice sunt substituite, restul blocului poate fi stocat în cache și se încarcă cu încărcarea inițială a paginii.
Exemplu de bloc:
public function build() {
$build = [];
$build[] = [
'#markup' => '<p>Parte statică a blocului, se încarcă cu pagina inițială.</p>',
];
$build[] = [
'#lazy_builder' => ['\Drupal\mymodule\LazyBuilders::getUser', []],
'#cache' => ['contexts' => ['utilizator']],
// contextele utilizator, sesiune sau vârsta maximă 0 sunt substituite automat
];
returnează $build;
}
/src/LazyBuilders.php:
<?php
namespace Drupal\mymodule;
utilizați Drupal\Core\Render\Element\RenderCallbackInterface;
clasa LazyBuilders implementează RenderCallbackInterface {
funcție publică statică getUser() {
întoarcere [
'#markup' => \Drupal::currentUser()->getDisplayName(),
];
}
}