C’est une constante depuis des lustres : le poids médian des pages web ne fait qu’augmenter. D’après le site HTTP Archive, cette augmentation se situe entre 5 et 10% par an et ne montre aucun signe de ralentissement.

Un graphique montre l’augmentation constante du poids médian des pages web entre 2011 et 2024 : c’est presque une ligne droite
Vers l’infini et au-delà !

On pourrait en explorer les causes et en déplorer les conséquences, mais ce n’est pas ce que je souhaite faire ici. Je veux simplement montrer tout ce que peut contenir une page web dont le poids serait 20% du poids médian actuel.

Le poids médian actuel sur desktop est 2 676 Ko. Notre objectif est donc 532 Ko. Moins de 10% des pages web sont aussi légères.

Que peut-on bien faire avec « si peu » de data ? Une pauvre page de connexion avec deux champs, peut-être ? Sans doute une page sans image, sans vidéo, sans interactivité, triste comme tout… Les autres pages ne sont pas si lourdes pour rien, si ?

Essayons voir.

Ce que contient cette page

Les bases : HTML / CSS / JS

Fonts et médias

Le nombre de requêtes compte aussi énormément dans la performance d’un site. Aujourd’hui, la médiane est de 76. Cette page en génère 31 (l’inclusion de CodePen déclenche une bonne moitié d’entre elles…)

Seulement 84 Ko ???

Ça ne va pas du tout. Ce post est déjà d’une longueur respectable, et pourtant, nous n’avons atteint que 84 Ko. 30 fois moins que la médiane. C’est intolérable.

Dois-je rappeler que l’objectif est 532 Ko ? Il va falloir se ressaisir. Ajoutons donc d’autres éléments à notre page.

Ci-dessous, voici un web component qui me permet de présenter les compatibilités de différentes fonctionnalités. Voici par exemple celle pour le format .avif évoqué précédemment.

Son inclusion et l’appel API associé représentent 24 Ko (4,5 %). On continue !

Une iframe CodePen ? Ce sera une des ressources les plus coûteuses de cette page avec un poids d’environ 85 Ko (6,3 %). Cela reste raisonnable compte tenu du service apporté.

Voir le code sur CodePen.

Une vidéo ? Puisqu’il le faut. 79 Ko (14,5 %).

Vidéo : un scroll vertical de la page, au fur et à mesure duquel les images sont chargées progressivement.

Un extrait de code ? En réalité, il ne rajoute que son poids en caractères. En effet, la coloration syntaxique est faite lors du pré-rendu côté serveur. Et les styles sont déjà dans l’unique fichier CSS inclus.

const images = await Image(`src/img/${fileSlug}.jpg`, {
  widths: [350, 700],
  formats: ["avif", "webp", "jpeg"],
  outputDir: "_site/img",
});

D’autres composants peuvent facilement être mobilisés « gratuitement », puisqu’il ne s’agit que du CSS déjà chargé. Allons-y, histoire de représenter l’ensemble des contenus présents sur le blog.

Une citation ?

Un poids de page élevé affecte disproportionnellement les personnes qui ne peuvent pas acheter des appareils haut de gamme et avoir accès à une connexion rapide et permettant une forte consommation de données.

Web Almanac 2024 (en anglais)

Un tableau ? Voici la répartition du poids des ressources sur une page web (les vidéos sont exclues car beaucoup de pages en sont dénuées).

Répartition du poids des ressources sur une page web (vidéos exclues)
Type de ressource % du total
Images 🖼️ 39,9 %
JavaScript ⚡ 23,2 %
Fonts 🔤 5 %
CSS 💄 3 %
HTML ✍️ 0,7 %

Source : Web Almanac 2024.

Ça devient lourd… mais pas assez

Me voilà rendu à seulement 272 Ko malgré tous mes efforts, et tous les types de contenus présents sur le blog sont déjà représentés. Je me demande si ce post était une bonne idée.

Pas le choix, on va jusqu’au bout : il va falloir remplir !

Une autre image ? Celle-ci rajoute 11 Ko (2,1%).

Une démonstration de la librairie React Joyride

Un autre CodePen, peut-être ? Beaucoup des ressources nécessaires étant déjà chargées par la première iframe, il n’en coûtera que 18 Ko (3,6%).

Voir le code sur CodePen.

Note : mesurer le poids d’une page n’est pas une science exacte. Utiliser l’option « désactiver le cache » de l’inspecteur réseau peut être trompeur car certaines sources seront alors chargées (et comptabilisées) deux fois, comme CodePen sur cette page. Pour mes tests, j’utilise Firefox, sans extension. Dans les paramètres, j’efface les « fichiers et pages en cache temporaire ». Puis je charge la page avec l’onglet réseau ouvert, sans cocher « désactiver le cache ». Après l’avoir parcourue en entier, je relève son poids transféré.

On dira que ma vidéo était trop courte. En voici une autre ! Celle-ci est plus longue et est accompagnée de son. Là, ça devient sérieux : 224 Ko (42%). Mais n’oublions pas qu’une grande partie des sites ne contient pas de vidéo.

Vidéo : démonstration du jeu Blobby Zombie. Lorsqu’un ennemi est touché, la musique progresse en intensité.

Ça y est, nous y sommes parvenus… Cette page fait enfin 20% du poids médian actuel. Pas mal, non ?

Ce que ne contient pas cette page

Si cette page a un poids raisonnable, c’est parce que ce blog fait de son mieux pour éviter quelques « gouffres » de ressources, qui sont malheureusement communs sur bon nombre de sites :

Souvent, une seule de ces erreurs suffit à plomber le poids d’un projet entier. Mais tant que vous gardez un œil vigilant sur ce que mobilise votre page, je pense en avoir fait la démonstration : vous avez de la marge.

Idéaliste ? Pas sûr.

La légèreté n’est pas réservée aux simples blogs :

Les exemples sont nombreux. Malheureusement, le poids standard d’un site classique est aujourd’hui… comment être poli ? Embarrassant. La complexité intrinsèque du projet suffit rarement à justifier le manque flagrant d’optimisation des ressources et de choix de sobriété à leur sujet.

Le web est de plus en plus lourd, mais ce n’est pas une fatalité. Vous choisissez ce qui rentre dans votre page.

En attendant, vous pouvez faire grimper de quelques octets le poids de celle-ci en laissant un commentaire. Mais je ne pense pas que cela puisse rendre le titre de cet article mensonger : la médiane ne va-t-elle pas continuer à monter, elle aussi ?

Aucun commentaire pour le moment

En réponse à
En validant, vous acceptez que Netlify stocke les données liées à votre commentaire.
Merci ! Votre commentaire a bien été enregistré et apparaîtra prochainement.