Es gibt zwei verschiedene Seiten-Caches.
Der interne dynamische Seiten-Cache funktioniert mit allen Arten von Elementen wie Blöcken und Knoten und verwendet die von diesen Elementen bereitgestellten Cache-Tags, Cache-Kontexte und das maximale Cache-Alter.
Der interne Seiten- Cache ist für vollständige Seiten für anonyme Benutzer vorgesehen und verwendet nur Cache-Tags.
Sie können den Seitencache für anonyme Benutzer mit einem Parameter steuern.
Gehen Sie zur Leistungskonfiguration:
admin/config/development/performance
Konfigurieren Sie das maximale Alter des Seitencaches mit der Zeit, wie lange Ihre Informationen gültig sind. Dies ist auch für Proxys und den Browser-Cache wichtig, da es nicht hilfreich wäre, den Drupal-Cache ungültig zu machen, wenn die Seite an anderen Stellen zwischengespeichert wird. Nach dieser Zeit läuft die Seite ab und sollte erneut erstellt werden. Laut Dokumentation:
Konfigurieren des internen Seitencaches Auf der Seite Leistung können Sie konfigurieren, wie lange Browser und Proxys Seiten zwischenspeichern dürfen. Diese Einstellung wird auch vom internen Seiten-Cache-Modul berücksichtigt. Es gibt keine andere Konfiguration.
Aber das ist nicht wahr. Sie sollten diese Zeit für Proxys und den Browser-Cache konfigurieren, aber der interne Seiten-Cache berücksichtigt nicht die Zeit, die Sie dort festgelegt haben. Die einzige zuverlässige Lösung, die ich gefunden habe, besteht darin, den internen Seiten- Cache des Moduls zu deinstallieren oder eine Ablaufzeit in einem EventSubscriber festzulegen (z. B. 3600 Sekunden in der Zukunft):
/src/EventSubscriber/SetExpiresSubscriber.php
<?php
namespace Drupal\mymodule\EventSubscriber;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class SetExpiresSubscriber implements EventSubscriberInterface {
public function onResponse(FilterResponseEvent $event) {
$request = $event->getRequest();
$response = $event->getResponse();
if ($event->isMasterRequest()) {
$request_time = $request->server->get('REQUEST_TIME');
$expires_time = (new \Datetime)->setTimestamp($request_time + 3600);
$response->setExpires($expires_time);
}
}
public static function getSubscribedEvents() {
$events[KernelEvents::RESPONSE][] = ['onResponse'];
return $events;
}
}
mymodule.services.yml
services:
mymodule.setexpires:
class: Drupal\mymodule\EventSubscriber\SetExpiresSubscriber
tags:
- { name: event_subscriber }