Bạn có thể loại trừ một khối khỏi BigPipe bằng cách vô hiệu hóa trình giữ chỗ trong quá trình tạo khối (xử lý trước quá muộn).
/**
* Triển khai hook_block_build_BASE_BLOCK_ID_alter().
*/
function mymodule_block_build_example_block_alter(mảng &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
// Vô hiệu hóa trình giữ chỗ của khối này.
$build['#create_placeholder'] = FALSE;
}
Nhưng nếu đây là một trong những khối luôn có độ trễ thì nó có thể khiến toàn bộ mô-đun BigPipe trở nên vô dụng.
Bạn có thể giải quyết vấn đề chuyển nội dung trong CSS. Trì hoãn hoặc dừng hiển thị khối (trong trường hợp này, bạn có thể sử dụng tiền xử lý) và lấp đầy khoảng trống trong trang được tải một phần bằng CSS.
Hoặc làm cho khối tiêu đề chi tiết hơn. Khi tất cả các phần động được giữ chỗ, phần còn lại của khối có thể lưu vào bộ nhớ đệm và tải cùng với lần tải trang ban đầu.
Khối ví dụ:
xây dựng chức năng công cộng () {
$xây dựng = [];
$build[] = [
'#markup' => '<p>Phần tĩnh của khối, tải cùng với trang ban đầu.</p>',
];
$build[] = [
'#lazy_builder' => ['\Drupal\mymodule\LazyBuilders::getUser', []],
'#cache' => ['bối cảnh' => ['người dùng']],
// bối cảnh người dùng, phiên hoặc độ tuổi tối đa 0 được giữ chỗ tự động
];
trả lại bản dựng $;
}
/src/LazyBuilders.php:
<?php
không gian tên Drupal\mymodule;
sử dụng Drupal\Core\Render\Element\RenderCallbackInterface;
lớp LazyBuilders triển khai RenderCallbackInterface {
hàm tĩnh công khai getUser() {
trở lại [
'#markup' => \Drupal::currentUser()->getDisplayName(),
];
}
}