Inkrementelle Statische Regenerierung (ISR)
Beispiele
Mit Inkrementeller Statischer Regenerierung (ISR) kannst du:
- Statische Inhalte aktualisieren, ohne die gesamte Website neu zu erstellen
- Die Serverlast reduzieren, indem vorgerenderte, statische Seiten für die meisten Anfragen bereitgestellt werden
- Sicherstellen, dass korrekte
cache-control
Header automatisch zu den Seiten hinzugefügt werden - Große Mengen an Inhaltsseiten verwalten, ohne lange
next build
Zeiten
Hier ist ein minimales Beispiel:
So funktioniert dieses Beispiel:
- Während
next build
werden alle bekannten Blogbeiträge generiert (in diesem Beispiel sind es 25) - Alle Anfragen an diese Seiten (z.B.
/blog/1
) werden gecached und sind sofort verfügbar - Nach Ablauf von 60 Sekunden zeigt die nächste Anfrage weiterhin die gecachte (veraltete) Seite
- Der Cache wird invalidiert und eine neue Version der Seite wird im Hintergrund generiert
- Nach erfolgreicher Generierung zeigt Next.js die aktualisierte Seite und speichert sie im Cache
- Wenn
/blog/26
angefragt wird, generiert Next.js diese Seite bei Bedarf und speichert sie im Cache
Referenz
Funktionen
Beispiele
On-Demand Validierung mit res.revalidate()
Für eine präzisere Revalidierungsmethode kannst du res.revalidate
verwenden, um eine neue Seite bei Bedarf von einer API Route aus zu generieren.
Diese API Route kann zum Beispiel unter /api/revalidate?secret=<token>
aufgerufen werden, um einen bestimmten Blogbeitrag zu revalidieren. Erstelle einen geheimen Token, der nur deiner Next.js App bekannt ist. Dieser Token wird verwendet, um unberechtigten Zugriff auf die Revalidierungs-API-Route zu verhindern.
Wenn du On-Demand Revalidierung verwendest, musst du keine revalidate
Zeit innerhalb von getStaticProps
angeben. Next.js wird den Standardwert false
(keine Revalidierung) verwenden und die Seite nur bei Bedarf revalidieren, wenn res.revalidate()
aufgerufen wird.
Umgang mit nicht abgefangenen Ausnahmen
Wenn es einen Fehler innerhalb von getStaticProps
bei der Hintergrund-Regeneration gibt oder du manuell einen Fehler wirfst, wird die zuletzt erfolgreich generierte Seite weiterhin angezeigt. Bei der nächsten Anfrage wird Next.js erneut versuchen, getStaticProps
aufzurufen.
Anpassen des Cache-Speicherorts
Caching und Revalidierung von Seiten (mit Inkrementeller Statischer Regenerierung) verwenden denselben gemeinsamen Cache. Bei Deployment auf Vercel wird der ISR-Cache automatisch in dauerhaftem Speicher persistiert.
Bei Self-Hosting wird der ISR-Cache im Dateisystem (auf der Festplatte) deines Next.js-Servers gespeichert. Dies funktioniert automatisch beim Self-Hosting sowohl mit dem Pages als auch dem App Router.
Du kannst den Next.js Cache-Speicherort konfigurieren, wenn du gecachte Seiten und Daten in dauerhaftem Speicher persistieren oder den Cache über mehrere Container oder Instanzen deiner Next.js Anwendung hinweg teilen möchtest. Mehr erfahren.
Fehlerbehebung
Debugging von Cache-Daten in lokaler Entwicklung
Wenn du die fetch
API verwendest, kannst du zusätzliches Logging hinzufügen, um zu verstehen, welche Anfragen gecached oder nicht gecached sind. Mehr über die logging
Option.
Überprüfen des korrekten Produktionsverhaltens
Um zu überprüfen, ob deine Seiten im Produktionsmodus korrekt gecached und revalidiert werden, kannst du lokal testen, indem du next build
und dann next start
ausführst, um den Next.js Produktionsserver zu starten.
Dies ermöglicht es dir, das ISR-Verhalten so zu testen, wie es in einer Produktionsumgebung funktionieren würde. Für weitere Debugging-Möglichkeiten füge die folgende Umgebungsvariable zu deiner .env
Datei hinzu:
Dies wird den Next.js Server dazu veranlassen, ISR Cache-Treffer und -Fehltreffer in der Konsole zu protokollieren. Du kannst die Ausgabe überprüfen, um zu sehen, welche Seiten während next build
generiert werden, sowie wie Seiten aktualisiert werden, wenn Pfade bei Bedarf aufgerufen werden.
Einschränkungen
- ISR wird nur bei Verwendung der Node.js Runtime (Standard) unterstützt.
- ISR wird nicht beim Erstellen eines Statischen Exports unterstützt.
- Middleware wird nicht für On-Demand ISR-Anfragen ausgeführt, das bedeutet, dass Pfadumschreibungen oder Logik in Middleware nicht angewendet werden. Stelle sicher, dass du den exakten Pfad revalidierst. Zum Beispiel
/post/1
anstelle eines umgeschriebenen/post-1
.
Versionshistorie
Version | Änderungen |
---|---|
v14.1.0 | Custom 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-bewusster ISR Fallback hinzugefügt. |
v9.5.0 | Pages Router: Stabiles ISR eingeführt. |