Cache max-age
Cache max-age = Zeitabhängigkeiten
Cache max-age entspricht der HTTP-Direktive max-age im Cache-Control-Header.
Warum?
Die maximale Cache-Dauer bietet eine deklarative Möglichkeit, zeitabhängige Caches zu erstellen.
Manche Daten sind nur für einen begrenzten Zeitraum gültig; in diesem Fall möchten Sie eine entsprechende maximale Lebensdauer angeben. Im Drupal 8 Core gibt es jedoch keine Daten, die nur zeitlich begrenzt gültig sind; wir cachen in der Regel permanent (siehe unten) und verlassen uns vollständig auf Cache-Tags für das Invalidate (Ungültigmachen).
Was ist das?
Max-age ist eine positive ganze Zahl, die eine Anzahl Sekunden angibt.
Max-age wird als einzelne Ganzzahl angegeben, da ein Cache-Element logischerweise nur eine maximale Lebensdauer haben kann.
Beispiele:
- 60 bedeutet Caching für 60 Sekunden
- 100 bedeutet Caching für 100 Sekunden
- 0 bedeutet Caching für null Sekunden, also kein Caching
- \Drupal\Core\Cache\Cache::PERMANENT bedeutet permanentes Caching, also wird es nur durch Cache-Tags ungültig gemacht (anders gesagt: ∞ oder unendliche Sekunden).
Wenn Sie also beispielsweise verhindern wollen, dass ein gerenderter Block gecacht wird, müssen Sie für ihn max-age = 0 setzen.
Beispiel für die meisten Render-Arrays:
$build['#cache']['max-age'] = 0;
Beispiel in einer Funktion:
\Drupal::cache()->set('my_cache_item', $school_list, REQUEST_TIME + (86400));
Wenn Sie die max-age eines Blocks auf 0 ändern wollen, müssen Sie die Methode getCacheMaxAge()
implementieren.
Beschränkungen von max-age
Leider funktioniert max-age für anonyme Nutzer und das Page Cache Modul des Drupal Cores nicht. Beispielsweise siehe diese Issues:
- #2352009: [pp-3] Weiterleitung der max-age von Elementen an Seitenheader und Page Cache
- #2449749: Hinzufügen von #cache['downstream-ttl'] zum erzwungenen Ablauf nach einer bestimmten Zeit und Korrektur der Logik von #cache['max-age'] durch Hinzufügen von #cache['age']
- #2835068: PageCache cached nicht cachebare Antworten (Verstoß gegen HTTP/1.0 Spezifikationen) + D8 deaktiviert absichtlich HTTP/1.0 Proxy = WTF
- #2951814: Immer X-Drupal-Cache und X-Drupal-Dynamic-Cache Header setzen, auch für nicht gecachte Antworten
Bis diese (und möglicherweise andere) Probleme behoben sind, bedenken Sie, dass das Setzen von max-age in einem Render-Array, das in eine Seite eingebunden ist, nicht ausreicht, damit anonyme Nutzer nach Ablauf der max-age eine neue Version sehen. Gleichzeitig versucht das bereitgestellte Modul Cache Control Override, diese Probleme zu mildern. Es kann Ihnen auch helfen, benutzerdefinierte Cache-Tags auf zeitabhängigen Seiteninhalten zu setzen und diese Tags manuell mit hook_cron()
zu invalidieren. Viel Erfolg!
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.