Qu’est-ce qu’une single-page application (SPA) ?

  • vuetelemetry
  • Guides
  • 6 min de lecture

Une single-page application se charge une fois puis réécrit la page dans le navigateur au fil de votre navigation. Voici ce que cela signifie, pourquoi c’est devenu populaire, et les compromis à connaître.

Une single-page application, ou SPA, est un site web qui charge un unique document HTML une seule fois puis met à jour le contenu dans le navigateur au fil de vos interactions, au lieu de récupérer une toute nouvelle page depuis le serveur à chaque clic. La « page unique » est littérale : le navigateur ne fait jamais de rechargement complet en usage normal. Tout, après ce premier chargement, est géré par du JavaScript qui réécrit la page courante.

Des sites multi-pages à la page unique

Du code source de framework JavaScript avec des fonctions de scope et de contrôleur, affiché sur un écran.
Du code source de framework JavaScript avec des fonctions de scope et de contrôleur, affiché sur un écran.

Pour saisir pourquoi les SPA existent, il aide de se rappeler le modèle traditionnel auquel elles ont réagi. Dans un site multi-pages classique, chaque lien ou soumission de formulaire demande au serveur un tout nouveau document HTML, que le navigateur recharge de zéro — en-tête, pied de page et tout. C’est simple et robuste, mais chaque navigation implique un rechargement visible et un aller-retour au serveur, ce qui peut sembler lent et décousu.

Une SPA renverse cela. Le serveur envoie une coquille HTML et un bundle de JavaScript à la première visite ; ensuite, naviguer vers une nouvelle « page » exécute du code dans le navigateur qui remplace la partie pertinente de l’interface et ne récupère que les données nécessaires, généralement sous forme de JSON depuis une API. Comme il n’y a pas de rechargement complet, les transitions peuvent être instantanées et l’expérience se rapproche d’une app de bureau ou mobile.

Les frameworks et l’attrait des SPA

C’est précisément le territoire des frameworks front-end. React, Vue, Svelte et Angular existent en grande partie pour rendre la construction de SPA gérable, en fournissant les composants, la gestion d’état et le routage côté client qui changent de vue sans rechargement. Quand vous entendez qu’un site est « construit avec React » ou « construit avec Vue », c’est très souvent une SPA — le framework est ce qui rend le modèle de page unique praticable à construire et maintenir.

  • SPA : charge une coquille HTML, puis met à jour le contenu dans le navigateur via JS
  • Construite avec des frameworks comme React, Vue, Svelte ou Angular
  • Pour : navigation rapide, façon app, après le premier chargement
  • Contre : premier chargement plus lourd ; soin requis pour SEO, accessibilité, routage
  • Le SSR (Next.js, Nuxt) offre un premier affichage rapide plus la navigation SPA

L’attrait est une expérience réellement plus fluide. Une fois le bundle initial chargé, les interactions sont rapides car l’app ne demande que des données plutôt que des documents entiers, et l’interface peut se mettre à jour avec fluidité sans le scintillement d’un rechargement. Pour des produits très interactifs — tableaux de bord, éditeurs, applications web qui se comportent comme des logiciels — cette réactivité est un avantage réel et durable sur le modèle multi-pages.

Les compromis en toute honnêteté

Mais le modèle SPA comporte des compromis honnêtes qu’il faut concevoir, pas ignorer. Le premier chargement est plus lourd, car le navigateur doit télécharger et exécuter un bundle JavaScript avant d’afficher un contenu utile, ce qui peut nuire à l’expérience sur connexions lentes ou appareils modestes. Si ce bundle gonfle sans contrôle, la rapidité même que la SPA promettait peut se transformer en un écran initial lent et vide.

Le référencement et l’accessibilité méritent un soin particulier. Comme une grande partie du contenu est rendue par du JavaScript après chargement, les moteurs de recherche et les outils qui n’exécutent pas de scripts peuvent ne voir qu’une coquille vide, sauf si vous prenez des mesures délibérées. Le routage côté client doit aussi être implémenté avec soin pour que le bouton « précédent » du navigateur, les liens profonds et l’historique se comportent comme les utilisateurs l’attendent, plutôt que de casser de façon subtile.

Le rendu côté serveur à la rescousse

La réponse de l’industrie à ces compromis est le rendu côté serveur et ses dérivés. Des méta-frameworks comme Next.js pour React et Nuxt pour Vue rendent la page initiale sur le serveur pour que l’utilisateur — et les moteurs de recherche — reçoivent un vrai contenu immédiatement, puis l’« hydratent » en une SPA complète dans le navigateur. Cet hybride garde le premier affichage rapide des sites traditionnels et la navigation fluide d’une SPA, ce qui explique pourquoi tant d’apps modernes l’adoptent.

La réponse de l’industrie à ces compromis est le rendu côté serveur et ses dérivés. Des méta-frameworks comme Next.js pour React et Nuxt pour Vue rendent la page initiale sur le serveur pour que l’utilisateur — et les moteurs de recherche — reçoivent un vrai contenu immédiatement, puis l’« hydratent » en une SPA complète dans le navigateur. Cet hybride garde le premier affichage rapide des sites traditionnels et la navigation fluide d’une SPA, ce qui explique pourquoi tant d’apps modernes l’adoptent.

— vuetelemetry

Choisir la SPA en connaissance de cause

Rien de tout cela ne rend la SPA universellement bonne ou mauvaise. Un site de contenu fait surtout d’articles peut être mieux servi par une approche traditionnelle ou statique, tandis qu’une application richement interactive bénéficie énormément du modèle SPA. Le savoir-faire est de choisir délibérément, en sachant que la « page unique » vous achète une interactivité fluide en échange d’un premier chargement plus lourd et de plus de responsabilité pour le référencement et l’accessibilité.

Comprise ainsi, la single-page application n’est pas un mot à la mode mais un choix d’architecture précis aux forces et aux coûts clairs. Elle se charge une fois, tourne dans le navigateur et donne l’impression d’une app — et quand vous la couplez au rendu côté serveur, vous pouvez avoir une grande partie de ce bénéfice sans en payer le plein prix. Connaître les compromis est ce qui vous permet d’y recourir au bon moment.

Stack liée