Skip to main content

Performance

Par défaut, SvelteKit fait le maximum pour rendre vos applications aussi performantes que possible :

  • Du code-splitting, afin qu’uniquement le code dont vous avez besoin pour la page actuelle soit chargé
  • Du préchargement d’assets, afin que les “cascades” (de fichiers requêtant d’autres fichiers) soient empêchées
  • Du hashing de fichier, afin que vos assets soient mis en cache pour toujours
  • De la fusion de requêtes, afin que les données récupérées par des fonctions load de serveur différentes soient groupées en une seule requête HTTP
  • Du chargement parallèle, afin que les fonctions load universelles distinctes récupèrent leurs données simultanément
  • De l’inlining de données, afin que les requêtes faites avec fetch lors du rendu côté serveur puissent être rejouées dans le navigateur sans générer une nouvelle requête
  • De l’invalidation conservative, afin que les fonctions load ne soient ré-exécutées que lorsque nécessaire
  • Du pré-rendu (configurable route par route, si besoin), afin que les pages sans données dynamiques puissent être servies instantanément
  • Du préchargement de liens, afin que les besoins en données et en code pour les navigations côté client soient anticipés

Néanmoins, nous ne pouvons pas (encore) éliminer toutes les sources de ralentissement. Pour atteindre une performance optimale, vous devriez être conscient•e des astuces suivantes.

Diagnostiquer les problèmes

La site de Google PageSpeed Insights et (pour plus des analyses plus poussées) WebPageTest sont d’excellents moyens de comprendre les caractéristiques de performance d’un site déjà déployé sur internet.

Votre navigateur inclut également des outils de développement utiles pour analyser votre site, qu’il soit déployé ou qu’il tourne localement :

Notez que votre site tournant localement en mode dev va montrer un comportement différent que celui de votre application de production, vous devriez donc faire vos tests de performance en mode preview après avoir compilé votre application.

Instrumentation

Si vous voyez dans l’onglet Réseau de votre navigateur qu’un appel API prend beaucoup de temps et que vous souhaitez comprendre pourquoi, vous pouvez envisager d’instrumenter votre serveur avec des outils comme OpenTelemetry ou les en-têtes Server-Timing .

Optimiser les assets

Images

La réduction de la taille des fichiers d’image est souvent l’un des changements permettant d’avoir le plus d’impact sur la performance d’un site. Svelte fournit le paquet @sveltejs/enhanced-img, dont l’utilisation est détaillée dans la section images, afin de vous faciliter la tâche. De plus, Lighthouse est utile pour identifier les coupables les plus dérangeants.

Videos

Les fichiers vidéo peuvent être très lourds, ils doivent donc être traités avec soin afin qu’ils soient optimisés :

Polices de caractères

SvelteKit précharge automatiquement les fichiers .js et .css critiques lorsque l’utilisateur ou l’utilisatrice visite une page, mais il ne précharge pas par défaut les polices, puisque ceci peut provoquer le téléchargement de fichiers non nécessaires (comme des graisses de police référencées par votre CSS mais non utilisées sur la page actuelle). Cela étant dit, précharger correctement les polices peut faire une énorme différence sur les performances ressenties de votre site. Dans votre hook handle, vous pouvez appeler la fonction resolve avec un filtre preload incluant votre police.

Vous pouvez réduire la taille de vos fichiers de police en découpant vos fichiers de police.

Réduire la taille du code

Version de Svelte

Nous recommandons d’utiliser la dernière version de Svelte. Svelte 5 est plus petit et plus rapide que Svelte 4, qui est lui-même plus petit et plus rapide que Svelte 3.

Paquets

L’outil rollup-plugin-visualizer peut être utile pour identifier quels paquets contribuent le plus à la taille de votre site. Vous pouvez également trouver des moyens de supprimer du code en inspectant manuellement la sortie de compilation (utilisez l’option build: { minify: false }) dans votre configuration Vite pour rendre les fichiers compilés lisibles, mais pensez à réactiver la minification avec de déployer votre application), ou via l’onglet Réseau des outils de développement de votre navigateur.

Scripts externes

Essayez de minimiser le nombre de script tiers s’exécutant dans votre navigateur. Par exemple, au lieu d’utiliser des outils d’analyse basés sur JavaScript, envisagez d’en utiliser des implémentations côté serveur, telles que celles proposées par de nombreuses plateformes possédant des adaptateurs SvelteKit, comme Cloudflare, Netlify, et Vercel.

Pour exécuter des scripts tiers dans un web worker (ce qui évite de bloquer le fil d’exécution principal), utilisez l’intégration SvelteKit de PartyTown.

Chargement sélectif

Le code importé avec des déclarations import statiques sera automatiquement inclus dans votre bundle avec le reste de votre page. S’il y a du code dont vous avez uniquement besoin lorsque certaines conditions sont réunies, utilisez la forme dynamique import(...) pour charger en différé vos composants de manière sélective.

Vous pouvez accélérer les navigations côté client en préchargeant à l’avance le code et les données nécessaires, en utilisant les options de liens. Ceci est configuré par défaut sur l’élément <body> lorsque vous créez une nouvelle application SvelteKit.

Pour les données se chargeant lentement et non nécessaires immédiatement, l’objet renvoyé par votre fonction load peut contenir des promesses plutôt que les données elles-mêmes. Pour les fonctions load de serveur, ceci va provoquer le streaming des données après la navigation (ou après le chargement initial de la page).

Un des plus gros problèmes de performance est ce que l’on appele une cascade, qui peut être une série de requêtes faites séquentiellement. Ceci peut se produire sur le serveur comme dans le navigateur.

  • Les cascades d’assets peuvent se produire dans le navigateur lorsque que votre HTML requête du JS qui requête du CSS qui requête une image de fond et une police. SvelteKit va en grande partie vous aider à résoudre ce problème en ajoutant des balises ou des en-têtes modulepreload, mais vous devriez vérifier dans l’onglet Réseau de vos outils de développement si des ressources additionnelles ont besoin d’être préchargées. Portez une attention particulière à ce point si vous utilisez des polices de caractères web puisqu’elles doivent être gérées manuellement.
  • Si une fonction load universelle fait un appel API pour récupérer l’utilisateur ou utilisatrice actuelle, puis utilise les informations de cette réponse pour récupérer une liste de choses sauvegardées, puis utilise cette réponse pour récupérer les détails de chaque chose, le navigateur va finir par faire de nombreuses requêtes les unes à la suite des autres. Ceci est fatal pour la performance, particulièrement pour les utilisateurs et utilisatrices qui se trouvent physiquement loin de votre serveur. Vous pouvez éviter ce problème en utilisant des fonctions load de serveur lorsque cela est possible.
  • Les fonctions load de serveur ne sont pas non plus immunisées contre les cascades (même si celles-ci sont moins coûteuses puisqu’elles impliquent rarement des aller-retours avec une grande latence). Par exemple, si vous requêtez l’utilisateur ou utilisatrice actuelle puis utilisez ces données pour faire une deuxième requête pour obtenir une liste de choses sauvegardées, il sera typiquement plus efficace de faire une seule requête en utilisant une jointure de base de données.

Hébergement

Votre frontend devrait se trouver dans le même centre de données que votre backend pour minimiser la latence. Pour les sites n’ayant pas de backend central, plusieurs adaptateurs SvelteKit supportent le déploiement sur le réseau edge, ce qui signifie que les requêtes de chaque utilisateur ou utilisatrice seront gérées par un serveur proche de leur emplacement. Ceci peut réduire significativement les temps de chargement. Certains adaptateurs supportent même la configuration du déploiement route par route. Vous devriez également envisager servir les images depuis un CDN (qui sont généralement des réseaux edge) — les hébergeurs de plusieurs adaptateurs SvelteKit feront cela automatiquement.

Assurez-vous que votre hébergeur utiliser HTTP/2 ou plus récent. Le code splitting de Vite crée de nombreux petits fichiers pour améliorer la mise en cache, ce qui implique une excellente performance, mais cela suppose que vos fichiers puissent être chargés en parallèle avec HTTP/2.

Plus de lecture

Construire une application SvelteKit performante est en grande partie la même chose que construire n’importe quelle application web performante. Vous devriez être capable d’appliquer les conseils de n’importe quelle ressource sur les performances web comme Core Web Vitals à n’importe quelle expérience web que vous construisez.

Modifier cette page sur Github llms.txt

précédent suivant