Рейтинг:1

Пользовательский блок по-прежнему кэшируется для анонимных пользователей, несмотря на то, что для getCacheMaxAge() установлено значение 0, и я не могу понять, почему

флаг ng

У меня есть собственный блок Drupal 8 с классом с функциями build() и getCacheMaxAge(). getCacheMaxAge() имеет значение 0, но все еще кэшируется для анонимных пользователей.

Если я добавлю код отладки в функцию build(), я увижу, что она вызывается, когда я вхожу в систему, но не для анонимных пользователей.

Мой код ниже. У нас установлен Memcached. Будет ли это причиной проблемы?

Единственными другими модулями кэширования являются основные.

<?php
class HeaderPhone extends BlockBase {
  /**
   * {@inheritdoc}
   */
  public function build() {

    $info = geo_location_blocks_get_region();
    $region = $info['region'];
    $tid = $info['tid'];

    return array(
        '#theme' => 'geo_location_header_phone',
        '#region' => $region,
        '#view' => views_embed_view('locations', 'block_3', $tid),
      
    );
  }

  /**
   * @return int
  */
  public function getCacheMaxAge() {
    return 0;
  }
}?>

  
Jaypan avatar
флаг de
Вам также может понадобиться добавить максимальный возраст в массив рендеринга, используя `'#cache' => ['max-age' => 0]]`.
quantumized avatar
флаг ng
Спасибо, Джейпан, я попытался добавить #cache в массив рендеринга, как было предложено, но блок все еще кэшируется для анонимных пользователей.
Jaypan avatar
флаг de
Перечитывая ваш пост, memcached может быть проблемой. Вы можете попробовать отключить его и посмотреть, сохраняется ли проблема. Или тестирование в среде с отключенным кэшем памяти. Другая возможность заключается в том, что кеш страницы может кэшировать всю страницу для анонимных пользователей.
quantumized avatar
флаг ng
Я исключил memcached. Я протестировал проблему на копии сайта на другом сервере без Memcached, и проблема все еще существует.
Рейтинг:5
флаг cn

Установка максимального возраста кеша на 0 не работает, если у вас все еще есть основной модуль. Внутренний кэш страниц включено.

Прочтите документацию, почему вы, вероятно, захотите отключить этот модуль или доставить блок другим способом:

Веб-сайты, предоставляющие персонализированный контент анонимным пользователям (динамические, за сеанс, например корзина) захочет отключить внутренний Модуль кэширования страниц. Этот модуль предполагает, что страницы идентичны для всех анонимные пользователи. Эти веб-сайты по-прежнему могут использовать преимущества Модуль динамического кэша страниц, хотя, или, в качестве альтернативы, может выполнять свои функции. персонализация с использованием JavaScript + AJAX.

https://www.drupal.org/docs/administering-a-drupal-site/internal-page-cache

quantumized avatar
флаг ng
Спасибо. проблема заключалась в модуле внутреннего кэша страниц.

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

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