Illustration for the postDu SSR au SSG : la méga-synthèse pour comprendre le rendu serveur dans Next.js

Du SSR au SSG : la méga-synthèse pour comprendre le rendu serveur dans Next.js

Le rendu côté serveur est une fonctionalité incontournable qui a déclenché l’émergence de toute une vague de nouveaux frameworks, dont Next.js.

Avant le SSR, on ne developpait en React quasiment que des Single Page Applications, qui reposent massivement sur du JavaScript côté client.

En effectuant le rendu du contenu sur le serveur avant de l’envoyer au client, le SSR permet des chargements de page initiaux plus rapide et une meilleure optimisation SEO.

Mais il y a plusieurs façons de faire du rendu côté serveur : au moment de la requête, au moment du build, et à encore plein d’autres moments.

Résultat, il y a tout un vocabulaire à maîtriser pour parler du rendu serveur.

Voici une méga-synthèse qui vous aidera à y voir plus clair :

Méga-synthèse du rendu côté serveur - terminologie

Voici un résumé des approches les plus courantes, en fonction du moment où l’on génère le contenu de la page, et de la façon dont on actualise ce contenu.

Data fetching & RenduMise à jour
Statique/export “SSG”Build-timeIl faut rebuild
Incrémental1ère requêteIl faut rebuild
RevalidationBuild ou 1ère requêteToutes les X secondes (si il y a des requêtes)
Revalidation à la demandeBuild ou 1ère requêteAppel à revalidatePath ou revalidateTag
Dynamique “SSR”Chaque requêteChaque requête

Notez que “SSR” signifie rendu côté serveur. Donc le rendu statique… techniquement c’est aussi du SSR !

Mais pour ne pas créer de confusions, la plupart des frameworks vont toujours parler de rendu statique ou SSG pour le rendu au build, et de SSR pour un rendu pour chaque requête HTTP d’un utilisateur.

En fait ce qui compte, c’est le “moment de rendu”. Pour le “lieu de rendu”, ça se passe côté serveur aussi bien pour le SSR que pour le SSG.

Très bien, mais cette synthèse est un peu abstraite. Comment choisir en pratique ?

Méga-synthèse du rendu côté serveur - en pratique

Moment de renduCe qui l’activeUsage
Build-timeDéfaut, option dynamic=force-staticDonnée identique pour tout le monde, change peu
1ère requêteParamètres non listés dans generateStaticPramsTrop de pages à pré-générer au build
Revalidationrevalidate=60Données statiques, mais qui changent de temps en temps
On-demand RevalidationrevalidatePath/revalidateTagForce la mise à jour d’un rendu statique après un changement
Request-timeAccéder à la requête via headers()/cookies(), faire un fetch avec {cache: 'no-store'}, dynamic=force-dynamicDonnées personnalisées, ou fraîches

Par exemple, pour un e-commerce :

Next commerce illustration d'une page éligible au rendu statique Capture d’écran de l’application Next.js Commerce, un bon candidat pour un rendu statique avec revalidation !

Rendu statique ou rendu dynamique : lequel choisir par défaut ?

Aujourd’hui, le rendu statique est utilisé par défaut dans Next.js.

Mais prochainement, le rendu dynamique risque de redevenir le mode par défaut dans les versions futures de Next.js (voir l’article “Our journey with caching” et l’annonce de Next.js 15 à ce sujet).

Les concepteurs de Next ont en effet constaté que le mode statique par défaut, bien que favorisant la performance, tendait à être plus confus pour les développeurs.

Il est en fait plus courant dans le développement web, avec ou sans Next, d’avoir un rendu dynamique par défaut, et de configurer explicitement le rendu statique.

Zoom sur la revalidation

La revalidation est une fonctionnalité relativement récente dans Next.js, par rapport aux rendus statiques et dynamiques qui sont plus connus.

Avec la revalidation, vous pouvez spécifier un intervalle de temps après lequel Next.js régénérera automatiquement la page en arrière-plan.

Cela garantit que votre contenu reste frais sans nécessiter un rebuild du site, et sans non plus avoir à passer sur un rendu pour chaque requête sur le site. On peut par exemple actualiser une page toutes les 10 minutes ou une fois par semaine, selon les besoins.

En plus de la revalidation basée sur une fréquence, Next.js prend également en charge la revalidation à la demande. Elle vous permet d’invalider programmatiquement le cache pour déclencher une mise à jour de la page via les fonctions revalidatePath ou revalidateTag.

En résumé

Le rendu serveur se décline en plusieurs approches qui dépendent surtout du moment où l’on fait le rendu, et du moment où l’on actualise les données.

Le rendu statique et le rendu dynamique sont les plus connus. Mais il y a plein de solutions intermédiaires, par exemple la revalidation régulière des pages statiques.

Next.js permet d’utiliser librement chacune de ces approches pour s’adapter à toutes les situations : pages totalement statiques comme les mentions légales, pages qui changent peu comme des articles de blogs, pages très dynamiques contenant des données actualisées en temps réel, tout est possible !

Vous avez apprécié cette ressource ?

Découvrez toutes nos formations Next.js et Astro en présentiel ou en distanciel

Voire toutes les ressources

Partager sur Bluesky Partager sur X
Flux RSS