Améliorer la recherche Google grâce aux dictionnaires de compression

Publié le 14 mai 2025

Le transport de compression par dictionnaire est une nouvelle norme qui nous permet de compresser le contenu répété dans les requêtes. Elle a été lancée dans Chrome 130 fin 2024. La recherche Google a adopté cette nouvelle technologie et a constaté d'énormes améliorations.

L'opportunité

Les pages Web que nous visitons contiennent beaucoup de contenu dupliqué. De nombreuses pages du même site Web sont constituées de grandes parties du même code (HTML, CSS ou JavaScript), seul le contenu entre ces codes changeant. Bien que chaque résultat soit une combinaison unique de centaines de fonctionnalités, ce qui donne un contenu totalement unique, le code envoyé au navigateur pour les produire présente encore de nombreuses similitudes.

Visuellement, la plupart des pages de résultats de recherche sont assez similaires, quel que soit le terme de recherche saisi : en haut, nous avons le logo Google, la barre de recherche et quelques commandes. Au milieu, nous avons quelques onglets pour le type de recherche, puis une liste de résultats de recherche à gauche, entrecoupée de différents widgets pour aider l'utilisateur, et un contexte supplémentaire à droite avec des panneaux "À propos" :

Page de résultats de recherche Google typique avec une barre de recherche en haut, des résultats dans la colonne principale de gauche et des informations supplémentaires à droite
Page de résultats de recherche Google

Enfin, en bas, nous avons les options de pagination et le pied de page standard. Il ne s'agit que de ce qui est visuellement disponible. En coulisses, il existe beaucoup de code (HTML, CSS et JavaScript) pour produire cette page. Une grande partie de ce code est directement intégrée au code HTML de la page pour optimiser les performances. Bien que cela permette un chargement de page plus rapide, cela a pour inconvénient de ne pas partager ce code entre différentes pages de résultats, comme le ferait une ressource mise en cache en externe.

Compression sur le Web

La compression est une technologie très utilisée pour le Web. La compression des ressources avec gzip ou des algorithmes plus récents comme Brotli ou Zstandard permet d'éviter la répétition dans un fichier grâce à une compression sans perte, afin de regrouper toutes les informations de manière aussi compacte que possible sur le serveur avant l'envoi. Le navigateur peut ensuite décompresser les octets compressés pour restaurer le contenu d'origine. Pour les images, la compression avec perte offre des avantages similaires en supprimant les octets supplémentaires qui ne sont pas perceptibles par les utilisateurs.

Jusqu'à récemment, la compression sur le Web était limitée à la compression dans les ressources. Il n'était pas possible de compresser différentes ressources, et encore moins différentes pages. Cette limitation est reconnue depuis longtemps et les ingénieurs Web ont cherché à la résoudre.

Le transport de compression par dictionnaire à la rescousse !

Browser Support

  • Chrome: 130.
  • Edge: 130.
  • Firefox Technology Preview: supported.
  • Safari: not supported.

Source

Le transport de compression par dictionnaire est une nouvelle norme qui permet la compression entre les ressources à l'aide de "dictionnaires" partagés qui permettent de remplacer les séries d'octets courants par des références provenant de ce dictionnaire partagé.

Les algorithmes de compression modernes tels que Brotli et Zstandard prennent en charge l'utilisation de dictionnaires de termes courants, ce qui permet une plus grande compression en remplaçant ces termes par une référence plus petite au dictionnaire. Brotli est même fourni avec un dictionnaire intégré de termes Web courants. Le transport de compression par dictionnaire s'appuie sur cette fonctionnalité en permettant au serveur et au navigateur de partager des dictionnaires personnalisés.

Les dictionnaires personnalisés peuvent être une ressource déjà utilisée sur le site. Par exemple, vous pouvez utiliser app.v1.js comme dictionnaire lorsque vous téléchargez app.v2.js pour ne télécharger que la différence (souvent appelée "compression delta"). Vous pouvez également spécifier une ressource de dictionnaire distincte avec une balise <link rel="compression-dictionary"> (ou un en-tête HTTP Link équivalent).

Cela peut réduire considérablement la taille de téléchargement des ressources contenant beaucoup de contenu ou de code partagé, comme les pages de résultats de recherche mentionnées précédemment.

Utilisation des dictionnaires de compression par la recherche Google

L'équipe de la recherche Google cherche constamment à améliorer les performances de la recherche. Elle a été l'une des premières à adopter les dictionnaires de compression, car elle a vu le potentiel de cette technologie.

La recherche utilise la compression Brotli partagée pour ses pages de résultats avec un fichier de dictionnaire distinct créé à partir d'un échantillon représentatif de résultats de recherche. Un pipeline automatisé robuste garantit que le dictionnaire reste à jour, en suivant le rythme des modifications fréquentes du contenu des pages de résultats de recherche, qui sont publiées plusieurs fois par jour. Vous pouvez utiliser les outils de développement pour voir exactement comment cela fonctionne.

Lorsqu'un client charge une page de résultats de recherche pour la première fois, le serveur fournit un lien vers le dictionnaire à l'aide de l'en-tête HTTP Link: avec un type rel=compression-dictionary :

En-têtes de réponse HTTP dans les outils pour les développeurs Chrome, avec l'en-tête Link rel=compression-dictionary mis en évidence
Outils pour les développeurs Chrome affichant l'en-tête Link dans l'onglet "Réseau"

Si le client est compatible avec la compression par dictionnaire Brotli, mais qu'il n'a pas encore mis en cache le dictionnaire partagé, le navigateur télécharge ce dictionnaire pendant les périodes d'inactivité. La réponse du dictionnaire inclut l'en-tête de réponse Use-As-Dictionary qui indique au navigateur les ressources pour lesquelles il peut utiliser ce dictionnaire :

En-têtes HTTP de réponse dans les outils pour les développeurs Chrome, avec l'en-tête &quot;Use-As-Dictionary&quot; mis en évidence
Outils pour les développeurs Chrome affichant l'en-tête Use-As-Dictionary dans l'onglet "Réseau"

Le dictionnaire utilise la sémantique cache-control standard et sera disponible pour toutes les ressources correspondant aux règles définies dans cet en-tête. Dans cet exemple, les pages commencent par /search.

Pour les futurs chargements de pages de résultats de recherche, le navigateur peut indiquer au serveur qu'il dispose d'un dictionnaire à l'aide de l'en-tête de requête HTTP Available-Dictionary. L'actualisation de la page montre cela en action :

En-têtes HTTP de réponse dans les outils pour les développeurs Chrome, avec l'en-tête Available-Dictionary mis en évidence
Outils pour les développeurs Chrome affichant l'en-tête Available-Dictionary dans l'onglet "Réseau"

Lorsque la case à cocher Conserver le journal est activée et que le filtrage est activé, nous pouvons comparer les deux réponses :

Comparaison de deux téléchargements de la même ressource, celui du haut étant de 107 ko et celui du bas de 60 ko
Onglet "Réseau" des outils pour les développeurs Chrome

Dans cet exemple, la première requête est la réponse complète de 107 Ko et utilise la compression Brotli (br), tandis que la deuxième requête d'actualisation est presque deux fois moins volumineuse (60 Ko) et utilise la compression Brotli compressée par dictionnaire (dcb), ce qui permet un temps de téléchargement plus rapide.

Dans Chrome, vous pouvez afficher la page chrome://net-internals/#sharedDictionary pour afficher les dictionnaires partagés et les effacer si vous souhaitez répéter cet exemple depuis le début.

Page &quot;Dictionnaire partagé&quot; affichant un dictionnaire partagé
Page #sharedDictionary de Net-Internals

Les résultats

La modification a été déployée auprès des utilisateurs de la recherche au printemps 2025, initialement auprès des utilisateurs de Chrome. Cela a réduit la taille moyenne de la charge utile HTML de 23% pour tous les utilisateurs de Chrome par rapport à la compression Brotli standard. Cette moyenne globale inclut à la fois les résultats non compressés par dictionnaire (par exemple, les utilisateurs qui utilisent la recherche pour la première fois sans dictionnaire) et les résultats de recherche compressés par dictionnaire. Pour les résultats compressés par dictionnaire, les économies sont encore plus importantes, comme nous l'avons vu avec l'amélioration de près de 50% dans l'exemple précédent.

Cela a entraîné une amélioration globale de 1, 7% du Largest Contentful Paint (LCP) et jusqu'à 9% sur les réseaux à latence élevée. Cela peut sembler faible, mais la recherche Google est un site hyper-optimisé. Les gains de cette ampleur sont donc énormes. D'autres sites peuvent constater des améliorations encore plus importantes avec cette technologie.

Essayez-la sur votre site !

Le transport de compression par dictionnaire est désormais prêt à être utilisé dans tous les navigateurs basés sur Chromium (Chrome, Edge, Opera, etc.). Il s'agit d'une amélioration progressive qui sera ignorée par les navigateurs non compatibles, mais à mesure que davantage de navigateurs la prendront en charge, ils pourront également en bénéficier.

Les défis que cette technologie résout ne sont pas spécifiques à la recherche Google. De nombreux sites peuvent bénéficier du transport de compression par dictionnaire, que ce soit avec un dictionnaire distinct comme celui utilisé par la recherche ou en utilisant une ressource existante comme dictionnaire (comme la version précédente d'une application lors du déploiement d'une nouvelle version).

Consultez le guide sur MDN pour en savoir plus sur le fonctionnement de cette technologie et sur la manière de l'implémenter sur votre site.

Cela nécessite une configuration sur votre serveur ou votre processus de compilation pour créer des ressources compressées basées sur un dictionnaire et les diffuser de manière appropriée, mais les résultats peuvent être très impressionnants en termes de performances.