On ne le répétera jamais assez, chaque octet compte quand il s’agit de web performance.
Plus les ressources échangées entre le serveur et le client sont volumineuses plus ces échanges seront longs. Ce qui impactera l’expérience utilisateur de vos internautes.
La compression HTTP est une technique qui consiste à compresser les fichiers avant de les envoyer, réduisant ainsi leur taille. Son activation est une best-practice récurrente dans les projets d’optimisation de performance web. En ce qui concerne les algorithmes de compression, Gzip règne en maître depuis son introduction. De nombreuses tentatives ont échoué à surpasser son excellent compromis taux/vitesse de compression. Brotli, l’algorithme de compression publié par Google en 2016, est un sérieux candidat à la couronne.
Comment utilise-t-on Brotli ?
En prérequis, pour échanger des données compressées entre client et serveur HTTP, il faut que le serveur (Apache, Nginx, etc.) et le client (votre navigateur) soient compatibles avec Brotli.
Support de Brotli par les navigateurs : compatibilité
Les dernières versions des principaux navigateurs sont compatibles avec Brotli depuis fin 2017. Le site caniuse estime la couverture à 89,66% des utilisateurs.
Support de Brotli par les navigateurs d’après caniuse (vert=supporté, rouge=non supporté, la taille des cases pour chaque navigateur est proportionnelle au nombre d’utilisateurs).
Support de Brotli par les serveurs HTTP
Les 3 serveurs web majeurs : Microsoft IIS, Apache et Nginx proposent un module permettant d’intégrer Brotli.
- Apache : le module mod_brotli permet d’ajouter le support de Brotli, module disponible à partir de la version 2.4.26 d’Apache
- Nginx : le module ngx_brotli (fourni par Google) est disponible
- Microsoft IIS : il existe une extension développée par la communauté, IIS Brotli à partir de la version IIS 7
On peut également noter que certains fournisseurs de CDN proposent d’activer Brotli en option. Notamment notre partenaire Akamai.
Brotli vs GZIP : les gains
Si vous êtes convaincus de la simplicité de mise en place de Brotli, voyons maintenant quels seraient les gains à attendre.
Le taux de compression est significativement meilleur
Le taux de compression (compression ratio) est défini comme le quotient du volume du fichier non compressé par son volume compressé. C’est ainsi qu’on évalue la qualité d’un algorithme de compression. En ce qui concerne notre comparaison entre Brotli et Gzip il n’y a vraiment pas photo, Brotli est significativement meilleur [1].
Voici les chiffres qui ressortent le plus souvent pour les types de ressources statiques classiques du web :
- HTML : 21% plus petit que GZIP
- JavaScript : 14% plus petit que GZIP
- CSS : 17% plus petit que GZIP
Ces résultats proviennent d’une étude réalisée sur le top 1000 des URL depuis HTTP Archive.
La vitesse de compression est à prendre en compte
Le taux de compression est bien meilleur, pourquoi regarder un autre critère ? Tout simplement parce que nous sommes dans un contexte web, ici l’objectif n’est pas la compression optimale à tout prix. On recherchera le meilleur compromis entre la vitesse de compression/décompression et le taux de compression.
Dans ce domaine Brotli est beaucoup moins impressionnant. Avec les paramètres par défaut, Gzip performe beaucoup mieux que Brotli. Afin de détailler ce qu’on entend par « défaut », introduisons la notion de niveau de qualité. Les algorithmes de compression ont un certain nombre de niveaux de qualité qui permettent de réguler le compromis vitesse/efficacité. Par exemple si on prend Gzip 1, il sera capable de compresser quasiment instantanément, mais les gains seront minimes.
Gzip a 9 niveaux de qualité et Brotli en a 11, si on veut se faire une idée réelle, nous devons comparer un à un tous ces niveaux.
Dans cette comparaison, nous ne nous baserons pas uniquement sur les économies d’octets réalisées, mais aussi sur le débit d’octet, ce qui intégrera à la fois vitesse de compression et de décompression.
Ce graphique présente une comparaison de Gzip et Brotli avec leurs niveaux de qualités respectifs. Les différentes méthodes de compression sont ordonnées par vitesse décroissante. On retrouve au milieu Gzip(6), c’est la version par défaut, nous avons donc comparé toutes les autres méthodes par rapport à celle-ci.
Ce graphe nous permet d’évaluer les niveaux de qualité pour lesquels Brotli devient moins performant que Gzip.
Brotli(5+) : les niveaux 5 et plus consomment plus que Gzip(6), à partir de ce niveau il faudra évaluer la pertinence en fonction des contextes, et des objets à compresser.
Brotli(4) semble être le cas optimal. Il nous offre une meilleure compression pour une vitesse quasiment équivalente.
Conclusion
- Brotli est un algorithme de compression qui devrait rapidement s’imposer comme un standard pour la compression HTTP.
- Il est aujourd’hui suffisamment supporté par les navigateurs et les serveurs HTTP.
- Il compresse plus que Gzip avec des vitesses de compression intéressantes.
- Les gains à attendre en terme de web performance sont réels et significatifs, l’impact sur le ressenti utilisateur dépendra des contextes et usages des internautes.
Sources :
- Results of experimenting with Brotli for dynamic web content par Cloudflare
- Understanding Brotli’s pontential par Akamai
[1] Comparaison effectuée avec les paramètres par défaut des 2 algorithmes de compression.