Điểm:3

BigPipe có thể loại trừ một số khối nhất định không?

lá cờ et

Tôi đã bật BigPipe trong Drupal 8 và nó giúp làm cho các trang ban đầu tải nhanh hơn.

Tuy nhiên, khối tiêu đề luôn là một trong những khối tải chậm, trông có vẻ xấu do nội dung chuyển xuống sau đó.

Có bất kỳ loại tiền xử lý nào trên một khối để loại trừ nó khỏi BigPipe không được tải khi bị trễ và buộc nó phải ở trong lần tải trang đầu tiên không?

Cảm ơn nhiều.

Điểm:4
lá cờ cn

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(),
    ];
  }

}
chantdev avatar
lá cờ et
Cảm ơn, tôi sẽ thử.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.