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
Funktionen
Beispiele
On-Demand-Validierung mit res.revalidate()
Für eine präzisere Methode der Revalidierung können Sie res.revalidate
verwenden, um eine neue Seite bedarfsgerecht von einem API-Router aus zu generieren.
Zum Beispiel kann diese API-Route unter /api/revalidate?secret=<token>
aufgerufen werden, um einen bestimmten Blogbeitrag zu revalidieren. Erstellen Sie ein geheimes Token, das nur Ihrer Next.js-App bekannt ist. Dieses Geheimnis wird verwendet, um unbefugten Zugriff auf die Revalidierungs-API-Route zu verhindern.
Wenn Sie On-Demand-Revalidierung verwenden, müssen Sie keine revalidate
-Zeit in getStaticProps
angeben. Next.js verwendet den Standardwert false
(keine Revalidierung) und revalidiert die Seite nur bedarfsgerecht, wenn res.revalidate()
aufgerufen wird.
Behandlung unbehandelter Ausnahmen
Wenn ein Fehler in getStaticProps
während der Hintergrundregenerierung auftritt oder Sie manuell einen Fehler werfen, wird die zuletzt erfolgreich generierte Seite weiterhin angezeigt. Bei der nächsten nachfolgenden Anfrage wird Next.js erneut versuchen, getStaticProps
aufzurufen.
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.
- 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. |