Implementierung von Incremental Static Regeneration (ISR)
Beispiele
Incremental Static Regeneration (ISR) ermöglicht Ihnen:
- Statische Inhalte ohne Neubau der gesamten Website zu aktualisieren
- Serverlast zu reduzieren durch Ausliefern vorgerenderter, statischer Seiten für die meisten Anfragen
- Sicherzustellen, dass korrekte
cache-control
-Header automatisch zu Seiten hinzugefügt werden - Große Mengen von Inhaltsseiten ohne lange
next build
-Zeiten zu verwalten
Hier ist ein minimales Beispiel:
So funktioniert dieses Beispiel:
- Während
next build
werden alle bekannten Blogbeiträge generiert (in diesem Beispiel gibt es 25) - Alle Anfragen an diese Seiten (z.B.
/blog/1
) werden zwischengespeichert und sind sofort verfügbar - Nach 60 Sekunden zeigt die nächste Anfrage weiterhin die zwischengespeicherte (veraltete) Seite
- Der Cache wird ungültig gemacht und eine neue Version der Seite beginnt im Hintergrund zu generieren
- Nach erfolgreicher Generierung zeigt Next.js die aktualisierte Seite an und speichert sie im Cache
- Wenn
/blog/26
angefragt wird, generiert Next.js diese Seite bedarfsgerecht und speichert sie im Cache
Referenz
Routensegment-Konfiguration
Funktionen
Beispiele
Zeitbasierte Revalidierung
Dies holt eine Liste von Blogbeiträgen auf /blog
ab und zeigt sie an. Nach einer Stunde wird der Cache für diese Seite bei der nächsten Anfrage ungültig gemacht. Dann wird im Hintergrund eine neue Version der Seite mit den neuesten Blogbeiträgen generiert.
Wir empfehlen, eine hohe Revalidierungszeit zu setzen. Zum Beispiel 1 Stunde statt 1 Sekunde. Wenn Sie mehr Präzision benötigen, sollten Sie On-Demand-Revalidierung in Betracht ziehen. Wenn Sie Echtzeitdaten benötigen, sollten Sie zu dynamischem Rendering wechseln.
On-Demand-Revalidierung mit revalidatePath
Für eine präzisere Methode der Revalidierung können Sie Seiten bedarfsgerecht mit der Funktion revalidatePath
ungültig machen.
Zum Beispiel würde diese Server Action nach dem Hinzufügen eines neuen Beitrags aufgerufen werden. Unabhängig davon, wie Sie Ihre Daten in Ihrer Server-Komponente abrufen, entweder mit fetch
oder durch Verbindung zu einer Datenbank, wird dies den Cache für die gesamte Route löschen und der Server-Komponente ermöglichen, frische Daten abzurufen.
Demo ansehen und Quellcode erkunden.
On-Demand-Revalidierung mit revalidateTag
Für die meisten Anwendungsfälle ist es besser, ganze Pfade zu revalidieren. Wenn Sie feinere Kontrolle benötigen, können Sie die Funktion revalidateTag
verwenden. Zum Beispiel können Sie einzelne fetch
-Aufrufe taggen:
Wenn Sie ein ORM verwenden oder eine Datenbank verbinden, können Sie unstable_cache
nutzen:
Sie können dann revalidateTag
in einer Server Action oder einem Route Handler verwenden:
Behandlung unbehandelter Ausnahmen
Wenn ein Fehler beim Versuch auftritt, Daten zu revalidieren, werden die zuletzt erfolgreich generierten Daten weiterhin aus dem Cache bereitgestellt. Bei der nächsten nachfolgenden Anfrage wird Next.js den Revalidierungsversuch wiederholen. Mehr über Fehlerbehandlung erfahren.
Anpassung des Cache-Speicherorts
Sie können den Cache-Speicherort von Next.js konfigurieren, wenn Sie zwischengespeicherte Seiten und Daten in dauerhaften Speicher persistieren oder den Cache über mehrere Container oder Instanzen Ihrer Next.js-Anwendung hinweg teilen möchten. Mehr erfahren.
Problembehandlung
Debuggen von zwischengespeicherten Daten in der lokalen Entwicklung
Wenn Sie die fetch
-API verwenden, können Sie zusätzliche Protokollierung hinzufügen, um zu verstehen, welche Anfragen zwischengespeichert oder nicht zwischengespeichert sind. Mehr über die logging
-Option erfahren.
Überprüfung des korrekten Produktionsverhaltens
Um zu überprüfen, ob Ihre Seiten in der Produktion korrekt zwischengespeichert und revalidiert werden, können Sie lokal testen, indem Sie next build
und dann next start
ausführen, um den Next.js-Produktionsserver zu starten.
Dadurch können Sie das ISR-Verhalten (Incremental Static Regeneration) testen, wie es in einer Produktionsumgebung funktionieren würde. Für weitere Debugging-Zwecke fügen Sie die folgende Umgebungsvariable zu Ihrer .env
-Datei hinzu:
Dies führt dazu, dass der Next.js-Server ISR-Cache-Treffer und -Fehlschläge in der Konsole protokolliert. Sie können die Ausgabe untersuchen, um zu sehen, welche Seiten während next build
generiert werden und wie Seiten aktualisiert werden, wenn Pfade bedarfsgesteuert aufgerufen werden.
Einschränkungen
- ISR wird nur unterstützt, wenn die Node.js-Laufzeitumgebung (Standard) verwendet wird.
- ISR wird nicht unterstützt, wenn ein Statischer Export erstellt wird.
- Wenn Sie mehrere
fetch
-Anfragen in einer statisch gerenderten Route haben und jede eine unterschiedlicherevalidate
-Frequenz aufweist, wird die niedrigste Zeit für ISR verwendet. Diese Revalidate-Frequenzen werden jedoch weiterhin vom Daten-Cache berücksichtigt. - Wenn eine der
fetch
-Anfragen in einer Route einerevalidate
-Zeit von0
oder ein explizitesno-store
aufweist, wird die Route dynamisch gerendert. - Middleware wird nicht für bedarfsgesteuerte ISR-Anfragen ausgeführt, was bedeutet, dass Pfadumleitungen oder Logik in der Middleware nicht angewendet werden. Stellen Sie sicher, dass Sie den exakten Pfad revalidieren. Zum Beispiel
/post/1
anstelle eines umgeleiteten/post-1
.
Plattformunterstützung
Bereitstellungsoption | Unterstützt |
---|---|
Node.js-Server | Ja |
Docker-Container | Ja |
Statischer Export | Nein |
Adapter | Plattformabhängig |
Erfahren Sie, wie Sie ISR konfigurieren, wenn Sie Next.js selbst hosten.
Versionsverlauf
Version | Änderungen |
---|---|
v14.1.0 | Benutzerdefinierter cacheHandler ist stabil. |
v13.0.0 | App Router wird eingeführt. |
v12.2.0 | Pages Router: On-Demand ISR ist stabil |
v12.0.0 | Pages Router: Bot-aware ISR-Fallback hinzugefügt. |
v9.5.0 | Pages Router: Stabiles ISR eingeführt. |