คุณสามารถยกเว้นบล็อกจาก BigPipe ได้โดยการปิดใช้ตัวยึดตำแหน่งในการสร้างบล็อก (การประมวลผลล่วงหน้าจะสายเกินไป)
/**
* ใช้ hook_block_build_BASE_BLOCK_ID_alter()
*/
ฟังก์ชัน mymodule_block_build_example_block_alter (อาร์เรย์ &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
// ปิดการใช้งานตัวยึดตำแหน่งบล็อกนี้
$build['#create_placeholder'] = FALSE;
}
แต่ถ้านี่เป็นหนึ่งในบล็อกที่มีการหน่วงเวลาอยู่เสมอ ก็อาจทำให้โมดูล BigPipe ทั้งหมดไร้ประโยชน์ได้
คุณสามารถแก้ไขการเปลี่ยนแปลงเนื้อหาใน CSS ชะลอหรือหยุดการเรนเดอร์บล็อก (ในกรณีนี้ คุณสามารถใช้การประมวลผลล่วงหน้า) และเติมช่องว่างในหน้าที่โหลดบางส่วนด้วย CSS
หรือทำให้บล็อกส่วนหัวมีความละเอียดมากขึ้น เมื่อส่วนไดนามิกทั้งหมดถูกแทนที่ ส่วนที่เหลือของบล็อกจะสามารถแคชได้และโหลดด้วยการโหลดเพจเริ่มต้น
ตัวอย่างบล็อก:
สร้างฟังก์ชั่นสาธารณะ () {
$สร้าง = [];
$สร้าง[] = [
'#markup' => '<p>ส่วนคงที่ของบล็อก โหลดด้วยหน้าแรก</p>',
];
$สร้าง[] = [
'#lazy_builder' => ['\Drupal\mymodule\LazyBuilders::getUser', []],
'#cache' => ['บริบท' => ['ผู้ใช้']],
// บริบทผู้ใช้ เซสชัน หรืออายุสูงสุด 0 จะถูกแทนที่โดยอัตโนมัติ
];
ส่งคืน $build;
}
/src/LazyBuilders.php:
<?php
เนมสเปซ Drupal\mymodule;
ใช้ Drupal\Core\Render\Element\RenderCallbackInterface;
คลาส LazyBuilders ใช้ RenderCallbackInterface {
ฟังก์ชันคงที่สาธารณะ getUser() {
กลับ [
'#markup' => \Drupal::currentUser()->getDisplayName(),
];
}
}