On peut aborder les performances Web sous différents aspects.
Du temps d’exécution du code à l’optimisation des images en passant par le premier rendu au sein du navigateur, tout y passe.
Dès lors qu’une application web est utilisée dans différentes régions, de nouvelles problématiques apparaissent…
Dans ce mail, on va aborder le sujet des CDN (Content Delivery Network ou Réseau de diffusion de contenu en français), leur utilité, le fonctionnement et l’importance qu’ils occupent dans le monde d’aujourd’hui.
Avant d’aborder les CDN, parlons des contenus statiques
On peut définir un contenu statique comme une ressource sans aucun dynamisme.
Dans le domaine du développement, on fera souvent référence aux fichiers types de fichiers suivant :
- HTML
- CSS
- Images
- Javascript
- Font
- Vidéos
- Audios
- JSON
- et bien d’autres types de fichiers...
Oui les fichiers Javascript ne sont pas considérés comme dynamiques.
Malgré le fait qu’un fichier Javascript peut être exécuté par un runtime, le fichier en lui-même reste une ressource statique…
La majorité des systèmes de build frontend (comme Webpack par ex) génère ce qu’on appelle une distribution statique.
En d’autres termes, le build va récupérer le code de toute ton application pour générer du contenu statique prêt à être déployé.
C’est à ce moment que le CDN entre en oeuvre.
Pourquoi distribuer le contenu via un CDN ?
On pourrait se dire qu’il est plus simple de distribuer le contenu statique depuis un serveur applicatif ?
Mauvaise idée !
Oui si tu as pensé à servir ton application frontend depuis le dossier public exposé par ton serveur Node.js (ou autre), c’est une très mauvaise idée.
Il existe un tas de raison, mais ce qu’il faut retenir, c’est que ça aura un impact sur les performances.
De toute manière, il est toujours important de séparer les tâches.
Si ton serveur applicatif vient à ralentir à cause d’un traitement en cours, la distribution de tes fichiers statiques peut être impactée.
La bonne pratique est à minima d’héberger les contenus statiques sur un serveur à part.
Couplé à une bonne configuration du cache, cela permettra d’optimiser les performances.
Le CDN entre en jeu quand on souhaite aller plus loin.
Tout d’abord, les CDN sont optimisés pour la performance, ce sont des infrastructures qui délivrent des performances bien au-delà de ce que tu es en mesure de mettre en place avec des outils standards.
Les CDN permettent aussi une utilisation transparente de serveurs miroirs.
Le cas d’usage est simple.
Si un utilisateur américain se connecte à ton application hébergée en Europe, la distance entre le client et le serveur va avoir un impact sur les performances.
Entre la latence et le temps de transfert, tu peux perdre de précieuses millisecondes.
Ça peut paraître anodin, mais plus la demande sur ton application augmente, plus le problème peut empirer…
Tu pourras alors configurer ton CDN pour héberger une copie de tes assets statiques dans chaque région du monde.
De cette manière, l’utilisateur américain utilisera la distribution statique (une copie sur le serveur miroir) hébergée en Amérique du Nord.
Pas besoin de te faire un dessin, de cette manière tu peux améliorer les performances de chargement initiales de ton application.
Ce scénario prend encore plus de sens si tu es amené à développer des produits pour des régions moins bien équipées en connexion haut débit.
Les CDN sont simples à scaler
Un CDN est conçu pour scaler rapidement à moindre coût.
Pour rappel, tu ne peux déployer quasiment aucune logique dans un CDN.
Si on exclut toute la partie configuration du serveur, tu ne vas pas exécuter de code directement sur ce genre de serveur.
La montée en charge est mise en oeuvre de manière simple et transparente sur la majorité des services.
Pas besoin de changer de taille de serveur, la plupart du temps, tu seras facturé au nombre de fichiers distribués ou à la bande passante utilisée.
À l’heure où j’écris ces lignes, AWS facture l’utilisation de Amazon Cloudfront (le CDN chez AWS) 60 centimes de dollars par million de requêtes.
Facile à vendre à ton CTO :)...
Un aspect sous-estimé de l’utilisation d’un CDN
Peut-être que tu n’as pas besoin de performances avancées pour ton site ?
Peut-être que tu te dis que tu n’en as pas besoin ?
Il existe un cas de figure ou tu pourrais avoir tort, ça se résume en 3 lettres.
SEO.
Les sites performants ont globalement une meilleure note SEO.
Un site optimisé peut potentiellement attirer bien plus de trafic de la part des moteurs de recherches.
Au-delà des performances, les CDN apportent une couche de sécurité bien appréciée des robots crawlers.
Alors, pourquoi s’en priver ?
À demain,
Captain Dev