Рейтинг:3

Может ли BigPipe исключить определенные блоки?

флаг et

Я включил BigPipe в Drupal 8, и это помогает ускорить начальную загрузку страниц.

Однако блок заголовка всегда является одним из блоков, которые загружаются с задержкой, что визуально выглядит плохо, поскольку содержимое впоследствии смещается вниз.

Есть ли какой-либо тип предварительной обработки блока, чтобы исключить его из BigPipe, не загружать с задержкой и заставить его загружаться при начальной загрузке страницы?

Большое спасибо.

Рейтинг:4
флаг cn

Вы можете исключить блок из 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(),
    ];
  }

}
chantdev avatar
флаг et
Спасибо, я попробую.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.