Có hai bộ đệm trang khác nhau.
Bộ đệm ẩn trang động nội bộ hoạt động với tất cả các loại phần tử như khối và nút và được sử dụng các thẻ bộ đệm, bối cảnh bộ đệm và tuổi thọ tối đa của bộ đệm được cung cấp bởi các thành phần này.
Bộ đệm ẩn nội bộ dành cho các trang hoàn chỉnh cho người dùng ẩn danh và chỉ sử dụng thẻ bộ đệm.
Bạn có thể kiểm soát bộ đệm trang cho người dùng ẩn danh với một tham số.
Đi đến cấu hình nước hoa:
admin/config/development/performance
Và định cấu hình tuổi tối đa của bộ đệm trang với thời gian thông tin của bạn hợp lệ. Điều này cũng quan trọng đối với proxy và bộ đệm của trình duyệt, vì nó sẽ không giúp làm mất hiệu lực bộ đệm drupal, nếu trang được lưu trữ ở những nơi khác. Sau thời gian đó, trang sẽ hết hạn và sẽ được xây dựng lại. Theo tài liệu:
Định cấu hình bộ đệm trang bên trong Trên trang Hiệu suất, bạn có thể định cấu hình thời gian trình duyệt và proxy có thể lưu trang; cài đặt đó cũng được mô-đun Bộ đệm trang nội bộ tuân thủ. Không có cấu hình khác.
Nhưng điều này là không đúng sự thật. Bạn nên định cấu hình thời gian này cho proxy và bộ đệm của trình duyệt, nhưng bộ đệm trang bên trong không tôn trọng thời gian bạn đặt ở đó. Giải pháp đáng tin cậy duy nhất tôi tìm thấy là gỡ cài đặt mô-đun Bộ đệm trang nội bộ hoặc đặt thời gian hết hạn trong Trình đăng ký sự kiện (ví dụ: 3600 giây trong tương lai):
/ src/EventSubscacker/setExpiresSubscacker.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.service.yml
services:
mymodule.setexpires:
class: Drupal\mymodule\EventSubscriber\SetExpiresSubscriber
tags:
- { name: event_subscriber }