Illustration for the post Résumé complet du SSR et du SSG dans Next.js (App Router)

Méga-synthèse du rendu côté serveur (SSR, SSG) dans Next.js : théorie et pratique

Par Eric Burel - Formateur chez LBKE

Publié le - Mis à jour le

Le rendu côté serveur (SSR) est une fonctionalité incontournable du développement d’applications web performantes. Le SSR est au coeur de toute une génération de frameworks, dont Next.js a été le pionnier.

Avant le SSR, on ne developpait en React quasiment que des Single Page Applications (SPA), qui reposent massivement sur du JavaScript côté client, exécuté dans le navigateur.

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 relativement complexe à maîtriser pour parler du rendu serveur. Nous consacrons un jour entier à ce concept dans notre formation Next.js !

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 recombiler
Incrémental1ère requêteIl faut recompiler
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, par opposition à un rendu dans le navigateur de l’utilisateur, côté client.

Donc le rendu statique, qui se produit sur votre propre serveur de développement ou de production est techniquement aussi du SSR !

Un centre de données Illustration d’un data center : le rendu SSR et le rendu SSG vont tout deux être réalisés ici, mais pas au même moment.

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”, quand le HTML est produit à partir de votre code Next.js et React. Pour le “lieu de rendu”, l’endroit où le calcul est effectué, cela 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. En pratique, comment choisir le mécanisme de rendu serveur le plus approprié dans une application Next.js ?

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

Voici comment activer chaque mécanisme de rendu serveur dans Next, du SSR au SSG

Moment de renduCe qui l’activeUsage
Compilation/build (SSG)Dé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
Revalidation à la demanderevalidatePath/revalidateTagForce la mise à jour d’un rendu statique après un changement
Requête dynamique (SSR)Accé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.

Le système de mise en cache va beaucoup évoluer dans la prochaine version de Next.js (version 16) pour remplacer les fonctions cache et unstable_cache, qui sont trop complexes. Vous pouvez déjà tester la directive “use cache” dans Next 15 en activant la fonctionnalité expérimentale !

En résumé : plusieurs techniques pour le rendu serveur dans Next.js

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 !

Commentez cet article sur les réseaux sociaux :

Partager sur Bluesky Partager sur X

À propos de l'auteur

Photo d'Eric Burel

Eric Burel est ingénieur diplômé de l'ENSIMAG. Il est co-fondateur de LBKE et formateur web et IA.

Il partage régulièrement ses connaissances à travers des articles publiés sur Smashing Magazine et sur son blog. Vous le croiserez sûrement au détour d'un meetup sur Montpellier !

En savoir plus sur Eric Burel

Vous avez apprécié cette ressource ? Découvrez toutes nos formations IA et web.

Formation recommandée :

Abonnez-vous pour recevoir les nouvelles ressources

Flux RSS