
HTTP/2, HTTP/3 et minification : la minification est-elle encore utile ?
HTTP/2 et HTTP/3 changent le trajet des fichiers, pas leur poids. Mesures de taille, de compilation et de bundling : ce que la minification apporte encore.
HTTP/2 a changé le voyage des fichiers, pas leur poids
Une affirmation revient sans cesse : depuis que HTTP/2 multiplexe les requêtes, il ne serait plus utile de minifier ni de regrouper les fichiers. La moitié est exacte. Le protocole a supprimé le coût des nombreuses petites requêtes. Il n’a pas retiré un seul octet d’un fichier JavaScript, et le navigateur doit toujours télécharger, décoder et compiler chacun d’eux. Ce guide sépare ce que HTTP/2 et HTTP/3 ont changé de ce qu’ils ont laissé intact. Les chiffres viennent de trois tests du 22 octobre 2026 (le jeu de données de FastMinify, un paquet de 644 modules et un test de compilation dans V8). Les RFC et la documentation des navigateurs citées au fil du texte complètent les faits. Pour le volet compression, voyez notre guide GZIP et Brotli.
Ce que les protocoles ont changé, et ce qu’ils ont laissé intact
HTTP/2 (RFC 9113, juin 2022) transporte de nombreuses requêtes et réponses en même temps sur une seule connexion. Avec HTTP/1.1, un navigateur ouvrait en général six connexions par hôte et mettait le reste en file d’attente. Cette file explique pourquoi les équipes concaténaient les fichiers, dessinaient des sprites et répartissaient les ressources sur plusieurs noms d’hôte.
Améliorations
HTTP/3 (RFC 9114, juin 2022) garde le modèle HTTP, mais circule sur QUIC au lieu de TCP. Un paquet perdu ne bloque plus que le flux concerné, alors qu’avec HTTP/2 il bloque tous les transferts de la connexion.
Améliorations
Les deux protocoles déplacent des octets. Aucun ne change le nombre d’octets d’un fichier, et aucun n’analyse votre code.
Améliorations
Nous avons utilisé le banc d’essai de minification de FastMinify (édition 2026-10). Il mesure des fichiers non minifiés de bibliothèques publiques bruts, avec gzip niveau 9 et avec brotli qualité 11. Chaque chiffre est une somme sur les fichiers d’un langage. Le JavaScript passe par Terser 5.51.2 aux réglages par défaut, le CSS par CSSO et le JSON par JSON.stringify.
Améliorations
Nous avons téléchargé lodash-es 4.18.1, qui livre 644 modules JavaScript, minifié chaque module avec esbuild et compressé en gzip niveau 9 et en brotli qualité 11. C’est un cas extrême, car peu de pages chargent 644 modules, mais il montre le mécanisme.
Améliorations
Nous avons compilé cinq bibliothèques avec V8 (Node 26.4.0 sur un Apple M4 Max), une fois telles que livrées et une fois minifiées avec Terser. Le test utilise new vm.Script sur une source qui change à chaque passage, pour éviter le cache de compilation. Chaque chiffre est la médiane de 30 passages, puis la médiane de cinq séries.
Améliorations
Ce qu’il faut garder et ce qu’il faut abandonner en 2026
Ces étapes sont rentables avec tous les protocoles.
Chacune avait un sens avec six connexions par hôte. Certaines coûtent maintenant quelque chose.
Vérifier ce que votre serveur envoie vraiment
Deux vérifications rapides donnent la réponse, et une troisième explique pourquoi une première visite affiche souvent h2.
L’encodage dépend de l’en-tête que le client envoie : testez avec celui d’un navigateur.
Cinq erreurs qui survivent au passage à HTTP/2
Passer à HTTP/2 ou HTTP/3 n’est pas une raison de livrer du code lisible. Le protocole ne décide pas de ce qu’il y a dans le fichier.
Les modules natifs et HTTP/2 permettent de servir les fichiers source tels quels. L’équipe de V8 recommande toujours de regrouper pour la production, et de ne livrer sans bundle que de petites applications de moins de 100 modules environ.
L’excès inverse est aussi courant. Un seul bundle pour toutes les pages signifie que chaque déploiement invalide tout le cache et que chaque page télécharge du code qu’elle n’exécute jamais.
Plusieurs habitudes n’avaient de sens qu’avec six connexions par hôte. Notre guide Base64 détaille le surcoût des data URI.
HTTP/3 améliore la reprise d’une connexion après une perte de paquets. Il ne réduit pas la page.
Quatre affirmations sur HTTP/2, HTTP/3 et le poids des fichiers
L’affirmation traite un transport plus rapide comme s’il réduisait la charge utile.
Compression et minification se recoupent, mais elles agissent sur des choses différentes. La compression retire la répétition. La minification retire ce dont le programme n’a jamais eu besoin.
Le multiplexage a levé la limite de requêtes parallèles, pas les autres coûts d’un fichier.
HTTP/3 corrige un problème réseau, la perte de paquets sur une connexion partagée.
Minifier et mesurer avec FastMinify
Le minificateur JavaScript, le minificateur CSS, le minificateur JSON et le minificateur HTML fonctionnent dans votre navigateur et affichent la taille d’origine et la taille de sortie.
Collez ou déposez le fichier
Collez la source dans le volet d’entrée ou déposez un fichier. Pour le JavaScript, choisissez le niveau de compression (conservateur, normal ou agressif).
Lisez le panneau Compression
Le panneau affiche la taille d’origine, la taille de sortie et le pourcentage gagné. Ce sont des tailles non compressées. Comparez-les aux chiffres bruts de cet article, pas à ce qui voyage.
Vérifiez l’option console
Le minificateur JavaScript retire par défaut les appels à console et les instructions debugger (options « Supprimer Console » et « Supprimer Debugger »). Désactivez-les si votre code en dépend.
Les pages des minificateurs JavaScript, CSS, HTML, XML, SVG et SQL ont un bouton « Concaténation de fichiers ». Il réunit les fichiers choisis puis minifie le résultat.
Ouvrez la concaténation de fichiers
Sélectionnez « Concaténation de fichiers » sur la page du minificateur et ajoutez vos fichiers. Glissez-les pour les placer dans l’ordre d’exécution voulu.
Concaténez et minifiez
Lancez « Concaténer et minifier ». Pour le JavaScript, l’outil joint les fichiers par un point-virgule sur sa propre ligne, afin qu’un fichier n’avale pas le suivant, puis minifie l’ensemble. Il ne résout pas les imports : pour un vrai graphe de dépendances, utilisez votre bundler (voir minificateurs en ligne et outils de build).
Reproduire les mesures sur vos propres fichiers
curl -I envoie une requête HEAD, et quelques serveurs y répondent autrement qu’à un GET. Remplacez l’URL par celle d’un de vos fichiers.
Exemple de base
Enregistrez le script sous le nom size.mjs. Il utilise gzip niveau 9 et brotli qualité 11, les réglages du banc d’essai.
Exemple de base
Utilisation
Ceci mesure seulement la compression. Réunir ainsi des modules ES ne donne pas un script qui fonctionne : servez-vous-en sur un dossier pour voir le coût des fichiers minuscules.
Exemple de base
Le script compile un script classique sans l’exécuter. new Script n’accepte pas les modules ES avec import ou export.
Exemple de base
Continuez à minifier et abandonnez les habitudes HTTP/1.1
HTTP/2 et HTTP/3 ont rendu les petites requêtes peu coûteuses. Ils n’ont pas rendu les gros fichiers petits. La minification divise encore par deux la taille compressée d’un JavaScript non minifié, retire quelques pour cent au CSS et réduit le travail de compilation. Ce qui a perdu sa valeur, c’est la boîte à outils HTTP/1.1 : noms d’hôte multipliés, push et bundles géants. Minifiez, compressez en brotli, regroupez avec mesure et jugez le résultat aux octets qui voyagent.
Minifiez vos fichiers dans le navigateur
Articles connexes

Convertissez un epoch Unix en date lisible et inversement, distinguez secondes et millisecondes, et évitez les pièges de fuseau, de JWT et de changement d’heure.

Lisez une expression cron champ par champ, voyez ses prochaines exécutions en UTC ou en heure locale et évitez les pièges de pas, de fuseau et de dialecte.

Calculez réseau, masque, plage d’hôtes et broadcast d’un CIDR, agrégez des plages en blocs minimaux et testez une IP, directement dans votre navigateur.