Cache max-age
Cache max-age = зависимости от времени
Cache max-age аналогичен HTTP-директиве max-age заголовка Cache-Control.
Почему?
Максимальный возраст кэша обеспечивает декларативный способ создания кэшей, зависящих от времени.
Некоторые данные действительны только в течение ограниченного периода времени, в этом случае вы хотите указать соответствующий максимальный возраст. Однако в случае ядра Drupal 8 у нас нет данных, которые действительны только в течение ограниченного периода времени; мы обычно кешируем постоянно (см. ниже) и полностью полагаемся на теги кеша для аннулирования.
Какая?
Максимальный возраст кэша - это положительное целое число, выражающее количество секунд.
Максимальный возраст кэша передается в виде отдельных целых чисел, поскольку у данного элемента кэша логически может быть только один максимальный возраст.
Примеры:
- 60 означает кеширование в течение 60 секунд
- 100 означает кеширование в течение 100 секунд
- 0 означает кеширование на ноль секунд, т.е. не кешируется
- \Drupal\Core\Cache\Cache::PERMANENT означает, что кешируется навсегда, то есть это будет только когда-либо аннулировано из-за тэгов кеша. (Другими словами: ∞ или бесконечные секунды.)
Поэтому, если вы, например, хотите предотвратить кэширование отрендеренного блока, вы должны указать для него max-age = 0.
Пример для большинства массивов рендеринга:
$build['#cache']['max-age'] = 0;
Пример в функции:
\Drupal::cache()->set('my_cache_item', $school_list, REQUEST_TIME + (86400));
Если вы хотите изменить max-age блока на 0, вы должны реализовать метод getCacheMaxAge.
Ограничения максимального возраста
К сожалению, max-age не работает для анонимных пользователей и модуля Page Cache ядра Drupal. Например, посмотрите эти проблемы:
- # 2352009: [pp-3] Пересылка максимального возраста элементов в заголовки страницы и кеш страницы
- # 2449749: Добавить #cache ['downstream-ttl'] для принудительного истечения срока действия через определенное время и исправить логику #cache ['max-age'], добавив #cache ['age']
- # 2835068: PageCache кэширует не кэшируемые ответы (нарушая спецификации HTTP/1.0) + D8 намеренно отключает прокси HTTP/1.0 = WTF
- # 2951814: Всегда устанавливать заголовки X-Drupal-Cache и X-Drupal-Dynamic-Cache, даже для ответов, которые не кэшируются
Пока эти (и, возможно, другие) проблемы не будут решены, имейте в виду, что установка максимального возраста для массива рендеринга, включенного в страницу, недостаточна, чтобы анонимные пользователи увидели новую версию после истечения максимального срока. В то же время, предоставленный модуль Cache Control Override пытается смягчить проблемы. Вам также может повезти, установив пользовательский тег кэша на страницах с содержимым, зависящим от времени, и аннулируйте эти теги вручную с помощью hook_cron(). Удачи!
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.