Comment implémenter la régénération statique incrémentielle (ISR)
La régénération statique incrémentielle (ISR) vous permet de :
- Mettre à jour du contenu statique sans reconstruire tout le site
- Réduire la charge du serveur en servant des pages statiques pré-rendues pour la plupart des requêtes
- Garantir que les en-têtes
cache-control
appropriés sont automatiquement ajoutés aux pages - Gérer un grand nombre de pages de contenu sans temps de construction
next build
longs
Voici un exemple minimal :
Voici comment cet exemple fonctionne :
- Pendant
next build
, tous les articles de blog connus sont générés (il y en a 25 dans cet exemple) - Toutes les requêtes vers ces pages (par exemple
/blog/1
) sont mises en cache et instantanées - Après 60 secondes écoulées, la prochaine requête affichera toujours la page mise en cache (obsolète)
- Le cache est invalidé et une nouvelle version de la page commence à être générée en arrière-plan
- Une fois générée avec succès, Next.js affichera et mettra en cache la page mise à jour
- Si
/blog/26
est demandé, Next.js générera et mettra en cache cette page à la demande
Référence
Fonctions
Exemples
Validation à la demande avec res.revalidate()
Pour une méthode plus précise de revalidation, utilisez res.revalidate
pour générer une nouvelle page à la demande depuis un Routeur API.
Par exemple, cette Route API peut être appelée à /api/revalidate?secret=<token>
pour revalider un article de blog donné. Créez un token secret connu uniquement par votre application Next.js. Ce secret sera utilisé pour empêcher un accès non autorisé à la Route API de revalidation.
Si vous utilisez la revalidation à la demande, vous n'avez pas besoin de spécifier un temps revalidate
dans getStaticProps
. Next.js utilisera la valeur par défaut false
(pas de revalidation) et ne revalidera la page qu'à la demande lorsque res.revalidate()
est appelé.
Gestion des exceptions non capturées
S'il y a une erreur dans getStaticProps
lors de la régénération en arrière-plan, ou si vous lancez une erreur manuellement, la dernière page générée avec succès continuera d'être affichée. Lors de la prochaine requête, Next.js réessayera d'appeler getStaticProps
.
Personnalisation de l'emplacement du cache
Vous pouvez configurer l'emplacement du cache Next.js si vous souhaitez persister les pages et données mises en cache vers un stockage durable, ou partager le cache entre plusieurs conteneurs ou instances de votre application Next.js. En savoir plus.
Dépannage
Débogage des données mises en cache en développement local
Si vous utilisez l'API fetch
, vous pouvez ajouter des logs supplémentaires pour comprendre quelles requêtes sont mises en cache ou non. En savoir plus sur l'option logging
.
Vérification du comportement en production
Pour vérifier que vos pages sont correctement mises en cache et revalidées en production, vous pouvez tester localement en exécutant next build
puis next start
pour lancer le serveur Next.js en mode production.
Cela vous permettra de tester le comportement de l'ISR (Incremental Static Regeneration) tel qu'il fonctionnerait dans un environnement de production. Pour un débogage approfondi, ajoutez la variable d'environnement suivante à votre fichier .env
:
Cela fera en sorte que le serveur Next.js enregistre dans la console les succès et les échecs du cache ISR. Vous pouvez inspecter la sortie pour voir quelles pages sont générées lors de next build
, ainsi que comment les pages sont mises à jour lorsque les chemins sont accédés à la demande.
Mises en garde
- L'ISR n'est pris en charge que lors de l'utilisation du runtime Node.js (par défaut).
- L'ISR n'est pas pris en charge lors de la création d'une exportation statique.
- Le middleware ne sera pas exécuté pour les requêtes ISR à la demande, ce qui signifie que toute réécriture de chemin ou logique dans le middleware ne sera pas appliquée. Assurez-vous de revalider le chemin exact. Par exemple,
/post/1
au lieu d'un chemin réécrit/post-1
.
Prise en charge par les plateformes
Option de déploiement | Pris en charge |
---|---|
Serveur Node.js | Oui |
Conteneur Docker | Oui |
Exportation statique | Non |
Adaptateurs | Dépend de la plateforme |
Apprenez comment configurer l'ISR lors de l'hébergement autonome de Next.js.
Historique des versions
Version | Modifications |
---|---|
v14.1.0 | Le cacheHandler personnalisé est stable. |
v13.0.0 | L'App Router est introduit. |
v12.2.0 | Pages Router : L'ISR à la demande est stable |
v12.0.0 | Pages Router : ISR avec prise en compte des bots ajouté. |
v9.5.0 | Pages Router : ISR stable introduit. |