cacheLife
Die Funktion cacheLife
wird verwendet, um die Lebensdauer des Caches einer Funktion oder Komponente festzulegen. Sie sollte zusammen mit der use cache
-Direktive und innerhalb des Gültigkeitsbereichs der Funktion oder Komponente verwendet werden.
Verwendung
Um cacheLife
zu verwenden, aktivieren Sie das dynamicIO
-Flag in Ihrer next.config.js
-Datei:
Importieren und rufen Sie dann die cacheLife
-Funktion innerhalb des Gültigkeitsbereichs der Funktion oder Komponente auf:
Referenz
Standard-Cache-Profile
Next.js bietet eine Reihe von benannten Cache-Profilen, die auf verschiedenen Zeitskalen modelliert sind. Wenn Sie kein Cache-Profil in der cacheLife
-Funktion zusammen mit der use cache
-Direktive angeben, wendet Next.js automatisch das default
-Cache-Profil an.
Wir empfehlen jedoch, beim Verwenden der use cache
-Direktive immer ein Cache-Profil hinzuzufügen, um das Caching-Verhalten explizit zu definieren.
Profil | stale | revalidate | expire | Beschreibung |
---|---|---|---|---|
default | 5 Minuten | 15 Minuten | 1 Jahr | Standardprofil, geeignet für Inhalte, die keine häufigen Updates benötigen |
seconds | 0 | 1 Sekunde | 1 Sekunde | Für sich schnell ändernde Inhalte, die nahezu Echtzeit-Updates erfordern |
minutes | 5 Minuten | 1 Minute | 1 Stunde | Für Inhalte, die innerhalb einer Stunde häufig aktualisiert werden |
hours | 5 Minuten | 1 Stunde | 1 Tag | Für Inhalte, die täglich aktualisiert werden, aber leicht veraltet sein dürfen |
days | 5 Minuten | 1 Tag | 1 Woche | Für Inhalte, die wöchentlich aktualisiert werden, aber einen Tag alt sein dürfen |
weeks | 5 Minuten | 1 Woche | 30 Tage | Für Inhalte, die monatlich aktualisiert werden, aber eine Woche alt sein dürfen |
max | 5 Minuten | 30 Tage | 1 Jahr | Für sehr stabile Inhalte, die selten aktualisiert werden müssen |
Die Zeichenfolgenwerte, die zum Referenzieren von Cache-Profilen verwendet werden, haben keine inhärente Bedeutung; sie dienen vielmehr als semantische Bezeichnungen. Dies ermöglicht es Ihnen, Ihre zwischengespeicherten Inhalte in Ihrem Codebase besser zu verstehen und zu verwalten.
Gut zu wissen: Die Aktualisierung der Konfigurationsoptionen
staleTimes
undexpireTime
aktualisiert auch die Eigenschaftenstale
undexpire
desdefault
-Cache-Profils.
Benutzerdefinierte Cache-Profile
Sie können benutzerdefinierte Cache-Profile konfigurieren, indem Sie sie der Option cacheLife
in Ihrer next.config.ts
-Datei hinzufügen.
Cache-Profile sind Objekte, die die folgenden Eigenschaften enthalten:
Eigenschaft | Wert | Beschreibung | Anforderung |
---|---|---|---|
stale | number | Dauer, für die der Client einen Wert zwischenspeichern sollte, ohne den Server zu überprüfen. | Optional |
revalidate | number | Häufigkeit, mit der der Cache auf dem Server aktualisiert werden soll; veraltete Werte können während der Aktualisierung bereitgestellt werden. | Optional |
expire | number | Maximale Dauer, für die ein Wert veraltet bleiben kann, bevor auf dynamisches Abrufen umgestellt wird; muss länger sein als revalidate . | Optional - Muss länger sein als revalidate |
Die Eigenschaft "stale" unterscheidet sich von der Einstellung staleTimes
, da sie speziell das clientseitige Router-Caching steuert. Während staleTimes
eine globale Einstellung ist, die alle Instanzen von dynamischen und statischen Daten betrifft, ermöglicht die cacheLife
-Konfiguration die Definition von "stale"-Zeiten auf Basis einzelner Funktionen oder Routen.
Gut zu wissen: Die Eigenschaft "stale" setzt nicht den
Cache-control: max-age
-Header. Sie steuert stattdessen den clientseitigen Router-Cache.
Beispiele
Definieren wiederverwendbarer Cache-Profile
Sie können ein wiederverwendbares Cache-Profil erstellen, indem Sie es in Ihrer next.config.ts
-Datei definieren. Wählen Sie einen Namen, der zu Ihrem Anwendungsfall passt, und legen Sie Werte für die Eigenschaften stale
, revalidate
und expire
fest. Sie können so viele benutzerdefinierte Cache-Profile erstellen, wie Sie benötigen. Jedes Profil kann über seinen Namen als Zeichenfolgenwert referenziert werden, der an die cacheLife
-Funktion übergeben wird.
Das obige Beispiel speichert für 14 Tage zwischen, prüft täglich auf Updates und lässt den Cache nach 14 Tagen ablaufen. Sie können dann auf dieses Profil in Ihrer gesamten Anwendung über seinen Namen verweisen:
Überschreiben der Standard-Cache-Profile
Während die Standard-Cache-Profile eine nützliche Möglichkeit bieten, darüber nachzudenken, wie frisch oder veraltet ein bestimmter Teil des zwischengespeicherten Outputs sein kann, bevorzugen Sie möglicherweise andere benannte Profile, die besser mit den Caching-Strategien Ihrer Anwendung übereinstimmen.
Sie können die standardmäßigen benannten Cache-Profile überschreiben, indem Sie eine neue Konfiguration mit demselben Namen wie die Standardprofile erstellen.
Das folgende Beispiel zeigt, wie das Standard-Cache-Profil "days" überschrieben wird:
Definieren von Cache-Profilen inline
Für spezifische Anwendungsfälle können Sie ein benutzerdefiniertes Cache-Profil festlegen, indem Sie ein Objekt an die cacheLife
-Funktion übergeben:
Dieses inline definierte Cache-Profil wird nur auf die Funktion oder Datei angewendet, in der es erstellt wurde. Wenn Sie dasselbe Profil in Ihrer gesamten Anwendung wiederverwenden möchten, können Sie die Konfiguration der cacheLife
-Eigenschaft Ihrer next.config.ts
-Datei hinzufügen.
Verschachtelte Verwendung von use cache
und cacheLife
Wenn Sie mehrere Caching-Verhalten in derselben Route oder Komponentenstruktur definieren und die inneren Caches ihr eigenes cacheLife
-Profil angeben, respektiert der äußere Cache die kürzeste Cache-Dauer unter ihnen. Dies gilt nur, wenn der äußere Cache kein eigenes explizites cacheLife
-Profil definiert hat.
Wenn Sie beispielsweise die use cache
-Direktive zu Ihrer Seite hinzufügen, ohne ein Cache-Profil anzugeben, wird das Standard-Cache-Profil implizit angewendet (cacheLife("default")
). Wenn eine in die Seite importierte Komponente ebenfalls die use cache
-Direktive mit ihrem eigenen Cache-Profil verwendet, werden die äußeren und inneren Cache-Profile verglichen, und die kürzeste in den Profilen festgelegte Dauer wird angewendet.
Und in einer separaten Datei haben wir die importierte Child-Komponente definiert: