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

Publié le 14 mai 2025

La compression par dictionnaire pour le transport est une nouvelle norme qui nous permet de compresser le contenu répété dans les requêtes. Elle a été publié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 consultons contiennent beaucoup de doublons. De nombreuses pages d'un même site Web sont constituées d'une grande partie du même code, qu'il s'agisse de code HTML, CSS ou JavaScript. Seul le contenu entre tout ce code change. 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 générer présente 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, vous trouverez le logo Google, la barre de recherche et quelques commandes. Au milieu, vous trouverez des onglets pour le type de recherche, puis une liste de résultats de recherche à gauche, entrecoupée de divers widgets pour aider l'utilisateur, et un contexte supplémentaire à droite avec des panneaux "À propos" :

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

Enfin, en bas, se trouvent les options de pagination et le pied de page standard. Il ne s'agit que de ce qui est visible. En coulisses, il y a beaucoup de code (HTML, CSS et JavaScript) pour produire cette page. Une grande partie de ce code est intégrée directement dans le code HTML de la page à des fins d'optimisation des performances. Bien que cela permette de charger la page plus rapidement, cela a pour inconvénient de ne pas partager ce code entre les 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 sur le Web. La compression des ressources avec gzip ou des algorithmes plus récents tels que Brotli ou Zstandard permet d'éviter les répétitions dans un fichier grâce à une compression sans perte pour empaqueter toutes les informations aussi étroitement 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 des octets supplémentaires qui peuvent ne pas être perceptibles par les utilisateurs.

Jusqu'à récemment, la compression sur le Web était limitée à la compression au sein des ressources. Il n'était pas possible de compresser des ressources différentes, et encore moins des pages différentes. Il s'agit d'une limitation que les ingénieurs Web ont longtemps cherché à corriger.

Le transport de compression par dictionnaire à la rescousse !

Browser Support

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

Source

La compression par dictionnaire pour le transport est une nouvelle norme qui permet de compresser des ressources à l'aide de "dictionnaires" partagés qui permettent de remplacer des séries d'octets courantes par des références de ce dictionnaire partagé.

Les algorithmes de compression modernes tels que Brotli et Zstandard permettent d'utiliser des dictionnaires de termes courants, ce qui permet une compression plus importante 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. La compression par dictionnaire pour le transport s'appuie sur ce principe en fournissant des moyens 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 à l'aide d'une balise <link rel="compression-dictionary"> (ou d'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 de dictionnaires de compression par la recherche Google

L'équipe chargée de la recherche Google cherche en permanence à améliorer les performances de la recherche. Ils ont été les premiers à adopter les dictionnaires de compression, car ils ont 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 contenus SRP qui changent fréquemment et sont publiés plusieurs fois par jour. Vous pouvez utiliser les outils pour les développeurs 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 HTTP de réponse dans les outils pour les développeurs Chrome, avec l&#39;en-tête Link rel=compression-dictionary mis en surbrillance
Outils pour les développeurs Chrome affichant l'en-tête Link dans l'onglet "Network" (Réseau)

Si le client est compatible avec la compression du dictionnaire Brotli, mais qu'il n'a pas encore mis en cache le dictionnaire partagé, le navigateur le télécharge 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&#39;en-tête Use-As-Dictionary mis en surbrillance
Outils pour les développeurs Chrome affichant l'en-tête Use-As-Dictionary dans l'onglet "Network" (Réseau)

Le dictionnaire utilisera 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 commençaient par /search).

Pour les futures 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. Actualisez la page pour voir ce qui se passe:

En-têtes HTTP de réponse dans les outils pour les développeurs Chrome, avec l&#39;en-tête &quot;Available-Dictionary&quot; mis en surbrillance
Outils pour les développeurs Chrome affichant l'en-tête Available-Dictionary dans l'onglet "Network" (Réseau)

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

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

Dans cet exemple, la première requête correspond à la réponse complète de 107 Ko et utilise la compression Brotli (br), tandis que la deuxième requête de rechargement est presque deux fois moins volumineuse (60 Ko) et utilise la compression Brotli (dcb) compressée avec dictionnaire, ce qui accélère le téléchargement.

Dans Chrome, vous pouvez consulter 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 Net-Internals

Les résultats

Ce changement a été déployé auprès des utilisateurs de la recherche au printemps 2025, d'abord pour les utilisateurs de Chrome. La taille moyenne de la charge utile HTML a ainsi été réduite 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 novices sans dictionnaire) et les résultats de recherche compressés par dictionnaire. Pour les résultats compressés avec un 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 du LCP (Largest Contentful Paint) de 1, 7% dans l'ensemble et jusqu'à 9% sur les réseaux à latence élevée. Ce chiffre peut sembler faible, mais la recherche Google est un site hyper-optimisé. Les gains de cette ampleur sont donc énormes. D'autres sites peuvent bénéficier d'améliorations encore plus importantes grâce à cette technologie.

Essayez-la sur votre site !

Le transport par dictionnaire de compression est désormais disponible 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 seront compatibles, ils pourront également en profiter.

Les défis que cette technologie résout ne sont pas spécifiques à la recherche Google. De nombreux sites peuvent bénéficier de la compression par dictionnaire pour le transport, 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 MDN pour en savoir plus sur le fonctionnement de cette technologie et découvrir comment 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 en fonction des besoins. Les résultats peuvent être très impressionnants en termes de performances.