В Drupal 9 кэширование играет решающую роль в оптимизации производительности и обеспечении быстрой загрузки страниц. Однако бывают ситуации, когда вам может потребоваться отключить кеш для определенных страниц, таких как динамический контент или страницы, специфичные для пользователя. В этой статье мы рассмотрим несколько способов отключения кеширования для определенных страниц в Drupal 9, что позволит вам точно настроить стратегию кеширования вашего сайта.
Метод 1: использование модуля «Истечение срока действия кэша»
Модуль «Истечение срока действия кэша» позволяет выборочно отключать кеш для определенных страниц в зависимости от различных условий. Вот пример того, как вы можете использовать этот модуль:
- Установите и включите модуль истечения срока действия кэша.
- Перейдите в раздел «Конфигурация» >«Разработка» >«Производительность» >«Срок действия кэша».
- Добавьте новое правило, указав путь или шаблон URL-адреса страницы, которую вы хотите исключить из кеширования.
- Настройте правило срока действия, чтобы сделать кеш недействительным для указанных страниц.
Метод 2: реализация пользовательского контекста кэша.
Drupal предоставляет мощный API-интерфейс кэша, который позволяет разработчикам определять собственные контексты кэша. Реализуя собственный контекст кэширования, вы можете контролировать поведение кэширования для определенных страниц. Вот пример того, как создать собственный контекст кэша:
- Создайте собственный модуль (например, my_custom_module).
- Определите плагин контекста кэша, создав файл MyCustomCacheContext.php внутри каталога src/Plugin/Cache/Context модуля.
- Реализуйте метод getContext(), чтобы вернуть уникальный идентификатор страницы, которую вы хотите исключить из кеширования.
- Включить пользовательский модуль.
<?php
namespace Drupal\my_custom_module\Plugin\Cache\Context;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Cache\Context\CacheContextInterface;
use Drupal\Core\Plugin\Context\ContextInterface;
use Symfony\Component\HttpFoundation\RequestStack;
/
* Provides a custom cache context for excluding specific pages from caching.
*
* @CacheContext("my_custom_context")
*/
class MyCustomCacheContext implements CacheContextInterface {
/
* The request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/
* Constructs a new MyCustomCacheContext object.
*
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* The request stack.
*/
public function __construct(RequestStack $request_stack) {
$this->requestStack = $request_stack;
}
/
* {@inheritdoc}
*/
public static function getLabel() {
return t('My Custom Context');
}
/
* {@inheritdoc}
*/
public function getContext(ContextInterface $context = NULL) {
$request = $this->requestStack->getCurrentRequest();
$path = $request->getPathInfo();
// Return a unique identifier for the page you want to exclude from caching.
if ($path == '/my-special-page') {
return 'my_custom_context';
}
return NULL;
}
/
* {@inheritdoc}
*/
public function getCacheableMetadata(ContextInterface $context = NULL) {
return new CacheableMetadata();
}
}
Метод 3. Использование модуля «Диспетчер страниц».
Модуль «Диспетчер страниц», входящий в экосистему Drupal Panels, позволяет создавать собственные макеты страниц и управлять различными аспектами рендеринга страниц, включая кэширование. Используя модуль «Диспетчер страниц», вы можете эффективно отключить кеш для определенных страниц. Вот как этого можно добиться:
- Установите и включите модуль «Менеджер страниц».
- Создайте собственный вариант страницы для конкретной страницы, на которой вы хотите отключить кеш.
- В настройках варианта перейдите в раздел «Кэширование» и выберите «Без кэша» или подходящую стратегию кэширования для этой конкретной страницы.
Используя методы, описанные в этой статье, вы можете отключить кеширование для определенных страниц в Drupal 9, обеспечивая больший контроль над стратегией кеширования вашего веб-сайта. Независимо от того, решите ли вы использовать модуль «Истечение срока действия кэша», внедрить собственный контекст кэша или использовать модуль «Диспетчер страниц», эти методы позволят вам оптимизировать производительность для динамических или пользовательских страниц. Поэкспериментируйте с этими методами в зависимости от ваших конкретных требований и найдите идеальный баланс между кэшированием и доставкой динамического контента.