現在ログインしているユーザーの名前を\Drupal::currentUser()->getUsername()
を使用してヘッダーに表示していますが、すでにキャッシュされているページが表示されています。 \Drupal::service('page_cache_kill_switch')->trigger()
を使用して特定のページのキャッシュを無効にできることはわかっていますが、これはheader.html.twigファイルでは機能しません。
パフォーマンスに影響を与えずにそれをどのように達成できますか?
ユーザーのキャッシュコンテキストとキャッシュタグが必要です。
$variables['username'] = [
'#markup' => \Drupal::currentUser()->getUsername(),
'#cache' => [
'contexts' => [
'user',
],
'tags' => [
'user:' . \Drupal::currentUser()->id(),
],
],
];
これをプリプロセスフックに直接追加できますが、レンダリングされる出力はユーザーごとに異なります。多数のユーザーの場合、これをレイジービルダーコールバックに配置すると、自動プレースホルダーの条件に一致し、ページの読み込みパフォーマンスに影響を与えることなくBigPipeを通じてレイジーロードできます。
https://www.drupal.org/docs/8/api/render-api/auto-placeholdering を参照してください