use cache
Die use cache
-Direktive ermöglicht es Ihnen, eine Route, eine React-Komponente oder eine Funktion als zwischengespeichert zu markieren. Sie kann am Anfang einer Datei verwendet werden, um anzugeben, dass alle Exporte in der Datei zwischengespeichert werden sollen, oder inline am Anfang einer Funktion oder Komponente, um den Rückgabewert zwischenzuspeichern.
Verwendung
use cache
ist derzeit ein experimentelles Feature. Um es zu aktivieren, fügen Sie die Option useCache
zu Ihrer next.config.ts
-Datei hinzu:
Gut zu wissen:
use cache
kann auch mit der OptiondynamicIO
aktiviert werden.
Fügen Sie dann use cache
auf Datei-, Komponenten- oder Funktionsebene hinzu:
Wie use cache
funktioniert
Cache-Schlüssel
Der Schlüssel eines Cache-Eintrags wird mit einer serialisierten Version seiner Eingaben generiert, die Folgendes umfasst:
- Build-ID (für jeden Build generiert)
- Funktions-ID (eine sichere, eindeutige Kennung für die Funktion)
- Die serialisierbaren Funktionsargumente (oder Props).
Die an die zwischengespeicherte Funktion übergebenen Argumente sowie alle Werte, die sie aus dem übergeordneten Scope liest, werden automatisch Teil des Schlüssels. Das bedeutet, dass derselbe Cache-Eintrag wiederverwendet wird, solange die Eingaben gleich sind.
Nicht-serialisierbare Argumente
Alle nicht-serialisierbaren Argumente, Props oder geschlossenen Werte werden innerhalb der zwischengespeicherten Funktion zu Referenzen und können nur durchgereicht, aber nicht inspiziert oder modifiziert werden. Diese nicht-serialisierbaren Werte werden zur Laufzeit der Anfrage ausgefüllt und werden nicht Teil des Cache-Schlüssels.
Beispielsweise kann eine zwischengespeicherte Funktion JSX als children
-Prop entgegennehmen und <div>{children}</div>
zurückgeben, aber sie kann das tatsächliche children
-Objekt nicht untersuchen. Dies ermöglicht es Ihnen, nicht zwischengespeicherte Inhalte in einer zwischengespeicherten Komponente zu verschachteln.
Rückgabewerte
Der Rückgabewert der zwischengespeicherten Funktion muss serialisierbar sein. Dies stellt sicher, dass die zwischengespeicherten Daten korrekt gespeichert und abgerufen werden können.
use cache
zur Build-Zeit
Wenn use cache
am Anfang eines Layouts oder einer Seite verwendet wird, wird das Routensegment vorgerendert, sodass es später neu validiert werden kann.
Das bedeutet, dass use cache
nicht mit Request-Time-APIs wie cookies
oder headers
verwendet werden kann.
use cache
zur Laufzeit
Auf dem Server werden die Cache-Einträge einzelner Komponenten oder Funktionen im Arbeitsspeicher zwischengespeichert.
Auf dem Client wird jeder vom Server-Cache zurückgegebene Inhalt für die Dauer der Sitzung oder bis zur Neuvalidierung im Browser-Speicher gespeichert.
Während der Neuvalidierung
Standardmäßig hat use cache
eine Neuvalidierungsdauer von 15 Minuten auf der Serverseite. Während dieser Zeitraum für Inhalte nützlich sein kann, die keine häufigen Aktualisierungen erfordern, können Sie die cacheLife
- und cacheTag
-APIs verwenden, um zu konfigurieren, wann einzelne Cache-Einträge neu validiert werden sollten.
cacheLife
: Konfigurieren Sie die Lebensdauer des Cache-Eintrags.cacheTag
: Erstellen Sie Tags für die bedarfsgesteuerte Neuvalidierung.
Beide APIs integrieren sich in die Client- und Server-Caching-Schichten, was bedeutet, dass Sie Ihre Caching-Semantik an einer Stelle konfigurieren können und sie überall angewendet werden.
Weitere Informationen finden Sie in den API-Dokumentationen zu cacheLife
und cacheTag
.
Beispiele
Zwischenspeichern einer gesamten Route mit use cache
Um eine gesamte Route vorzurrendern, fügen Sie use cache
am Anfang sowohl der layout
- als auch der page
-Datei hinzu. Jedes dieser Segmente wird als separater Einstiegspunkt in Ihrer Anwendung behandelt und unabhängig zwischengespeichert.
Alle Komponenten, die in die page
-Datei importiert und verschachtelt werden, erben das Cache-Verhalten der page
.
Gut zu wissen:
- Wenn
use cache
nur zumlayout
oder zurpage
hinzugefügt wird, wird nur dieses Routensegment und alle darin importierten Komponenten zwischengespeichert.- Wenn eines der verschachtelten Kinder in der Route Dynamische APIs verwendet, wird die Route nicht vorgerendert.
Zwischenspeichern der Ausgabe einer Komponente mit use cache
Sie können use cache
auf Komponentenebene verwenden, um Abfragen oder Berechnungen, die innerhalb dieser Komponente durchgeführt werden, zwischenzuspeichern. Der Cache-Eintrag wird wiederverwendet, solange die serialisierten Props in jeder Instanz denselben Wert erzeugen.
Zwischenspeichern der Ausgabe einer Funktion mit use cache
Da Sie use cache
zu jeder asynchronen Funktion hinzufügen können, sind Sie nicht auf das Zwischenspeichern von Komponenten oder Routen beschränkt. Sie können beispielsweise eine Netzwerkanfrage, eine Datenbankabfrage oder eine langsame Berechnung zwischenzuspeichern.
Verschachtelung
Wenn Sie nicht-serialisierbare Argumente an eine zwischengespeicherte Funktion übergeben müssen, können Sie sie als children
übergeben. Dies bedeutet, dass sich die children
-Referenz ändern kann, ohne den Cache-Eintrag zu beeinflussen.
Sie können auch Server-Actions durch zwischengespeicherte Komponenten an Client-Komponenten übergeben, ohne sie innerhalb der zwischengespeicherten Funktion aufzurufen.
Plattformunterstützung
Bereitstellungsoption | Unterstützt |
---|---|
Node.js-Server | Ja |
Docker-Container | Ja |
Statischer Export | Nein |
Adapter | Plattformspezifisch |
Erfahren Sie, wie Sie Caching konfigurieren, wenn Sie Next.js selbst hosten.
Versionsverlauf
Version | Änderungen |
---|---|
v15.0.0 | "use cache" wird als experimentelles Feature eingeführt. |