Data publikacji: 14 maja 2025 r.
Compression Dictionary Transport to nowy standard, który pozwala nam kompresować powtarzające się treści w różnych żądaniach. Został on wprowadzony w Chrome 130 pod koniec 2024 r. W wyszukiwarce Google zastosowaliśmy tę nową technologię i zaobserwowaliśmy ogromne ulepszenia.
Pomysł
Na odwiedzanych przez nas stronach internetowych występuje wiele duplikatów. Wiele stron w tej samej witrynie składa się z dużych części tego samego kodu (HTML, CSS lub JavaScript), a zmienia się tylko zawartość. Każdy wynik to niepowtarzalna kombinacja setek funkcji, która tworzy zupełnie unikalne treści, ale kod wysyłany do przeglądarki w celu ich wygenerowania ma wiele wspólnych elementów.
Pod względem wizualnym większość stron wyników wyszukiwania jest dość podobna, niezależnie od tego, jakie hasło zostało wpisane: u góry znajduje się logo Google, pasek wyszukiwania i kilka elementów sterujących. Pośrodku mamy karty z rodzajem wyszukiwania, a po lewej stronie listę wyników wyszukiwania z różnymi widżetami ułatwiającymi użytkownikowi korzystanie z wyszukiwarki. Po prawej stronie znajdują się panele „O tym” z dodatkowymi informacjami:

Na dole znajdują się opcje stronowania i standardowa stopka. To tylko to, co jest widoczne. W tle jest dużo kodu (HTML, CSS i JavaScript), który tworzy tę stronę. Większość tego kodu jest wstawiana bezpośrednio do kodu HTML strony w celu optymalizacji wydajności. Chociaż pozwala to na szybsze wczytywanie strony, ma też wadę, ponieważ kod nie jest udostępniany na różnych stronach wyników, tak jak w przypadku zasobu w zewnętrznej pamięci podręcznej.
Kompresja w internecie
Kompresja to często używana technologia w internecie. Kompresowanie zasobów za pomocą gzip lub nowszych algorytmów, takich jak Brotli czy Zstandard, pozwala uniknąć powtórzeń w pliku dzięki bezstratnej kompresji, aby przed wysłaniem upchać na serwerze jak najwięcej informacji. Następnie przeglądarka może rozpakować skompresowane bajty, aby przywrócić pierwotną treść. W przypadku obrazów kompresja stratna zapewnia podobne korzyści dzięki usuwaniu dodatkowych bajtów, które mogą nie być zauważalne dla użytkowników.
Do niedawna kompresja w internecie była ograniczona do kompresji w zasobach. Nie można było skompresować różnych zasobów, a tym bardziej różnych stron. Od dawna było to uznawane za ograniczenie, które inżynierowie pracujący nad siecią chcieli naprawić.
Transport słownika kompresji z pomocą
Compression Dictionary Transport to nowy standard, który umożliwia kompresję na poziomie zasobów za pomocą współdzielonych „słówników”, które umożliwiają zastępowanie typowych ciągów bajtów odwołaniami z tego słownika.
Nowoczesne algorytmy kompresji, takie jak Brotli i Zstandard, obsługują słowniki wspólnych terminów, co pozwala na lepszą kompresję poprzez zastąpienie tych terminów krótszymi odwołaniami do słownika. Brotli zawiera nawet wbudowany słownik popularnych terminów internetowych. Transport słownika kompresji opiera się na tym, zapewniając serwerowi i przeglądarce sposoby udostępniania niestandardowych słowników.
Słowniki niestandardowe mogą być zasobem, który jest już używany w witrynie. Podczas pobierania pliku app.v2.js
możesz na przykład użyć pliku app.v1.js
jako słownika, aby pobrać tylko różnicę (tzw. kompresja delta). Możesz też podać osobny zasób słownika za pomocą tagu <link rel="compression-dictionary">
(lub odpowiedniego nagłówka HTTP Link
).
Może to znacznie zmniejszyć rozmiar pobieranych zasobów z dużą ilością udostępnionych treści lub kodu, np. stron wyników wyszukiwania.
Używanie słowników kompresji przez wyszukiwarkę Google
Zespół wyszukiwarki Google stale pracuje nad poprawą jej skuteczności. Jako pierwsi zaczęli korzystać z słowników kompresji, ponieważ dostrzegli potencjał tej technologii.
Wyszukiwarka używa wspólnej kompresji Brotli na stronach wyników z osobnym plikiem słownika utworzonym na podstawie reprezentatywnej próby wyników wyszukiwania. Solidny automatyczny potok zapewnia aktualność słownika, który jest aktualizowany wraz z często zmieniającymi się treściami SRP, które są publikowane kilka razy dziennie. Aby dowiedzieć się, jak to działa, możesz użyć Narzędzi deweloperskich.
Gdy klient po raz pierwszy wczyta stronę wyników wyszukiwania, serwer udostępnia link do słownika za pomocą nagłówka HTTP Link:
o typie rel=compression-dictionary
:

Link
na karcie SiećJeśli klient obsługuje kompresję słownika Brotli, ale nie ma jeszcze w pamięci podręcznej wspólnego słownika, przeglądarka pobiera go w czasie bezczynności. Odpowiedź słownika zawiera nagłówek odpowiedzi Use-As-Dictionary
, który informuje przeglądarkę, do jakich zasobów można użyć tego słownika:

Use-As-Dictionary
na karcie SiećSłownik będzie używać standardowej semantyki cache-control
i będzie dostępny dla wszystkich zasobów pasujących do reguł zdefiniowanych w tym nagłówku – w tym przykładzie stron zaczynających się od /search
.
Podczas wczytywania strony z wynikami wyszukiwania przeglądarka może poinformować serwer o tym, że ma słownik, używając nagłówka żądania HTTP Available-Dictionary
. Ponowne załadowanie strony pokazuje to w akcji:

Available-Dictionary
na karcie SiećPo włączeniu i sfiltrowaniu za pomocą pola wyboru Zachowaj log możemy porównać obie odpowiedzi:

W tym przykładzie pierwsze żądanie to pełna odpowiedź o rozmiary 107 KB, która wykorzystuje kompresję Brotli (br
), a drugie żądanie ponownego wczytania ma rozmiar 60 KB i wykorzystuje kompresję Brotli z kompresją słownikową (dcb
), co powoduje szybsze pobieranie.
W Chrome możesz wyświetlić stronę chrome://net-internals/#sharedDictionary
, aby zobaczyć udostępnione słowniki i je usunąć, jeśli chcesz powtórzyć ten przykład od początku.

#sharedDictionary
Wyniki
Zmiana została wdrożona wśród użytkowników wyszukiwarki wiosną 2025 r., początkowo wśród użytkowników Chrome. Dzięki temu średni rozmiar ładunku HTML dla wszystkich użytkowników Chrome zmniejszył się o 23% w porównaniu ze standardową kompresją Brotli. Ta średnia obejmuje zarówno wyniki wyszukiwania bez kompresji słownikowej (np. dla nowych użytkowników bez słownika), jak i wyniki wyszukiwania z kompresją słownikową. W przypadku wyników skompresowanych za pomocą słownika oszczędności są jeszcze większe, co widać w przypadku poprzedniego przykładu, w którym odnotowano poprawę o prawie 50%.
W efekcie największe wyrenderowanie treści (LCP) poprawiło się o 1,7% w ogóle, a na sieciach o wysokiej latencji – nawet o 9%. Może się to wydawać niewielką wartością, ale wyszukiwarka Google to witryna bardzo zoptymalizowana, więc zyski o takim rozmiarze są ogromne. Inne strony mogą odczuć jeszcze większe korzyści z tej technologii.
Wypróbuj w swojej witrynie.
Compression Dictionary Transport jest teraz gotowy do użycia we wszystkich przeglądarkach opartych na Chromium (Chrome, Edge, Opera itp.). Jest to stopniowe ulepszenie, które będzie ignorowane przez przeglądarki, które go nie obsługują, ale w miarę, jak będzie ono obsługiwane przez coraz więcej przeglądarek, będzie ono przynosić korzyści również użytkownikom tych przeglądarek.
Problemy, które rozwiązuje ta technologia, nie są charakterystyczne dla wyszukiwarki Google. Z transportu słownika kompresji mogą korzystać różne witryny, zarówno z osobnym słownikiem, takim jak używany w wyszukiwarce, jak i z dotychczasowego zasobu jako słownika (np. z poprzedniej wersji aplikacji podczas wdrażania nowej).
Więcej informacji o tym, jak działa ta technologia i jak można ją wdrożyć w witrynie, znajdziesz w przewodniku na MDN.
Wymaga to skonfigurowania na serwerze lub w procesie kompilacji, aby tworzyć skompresowane zasoby na podstawie słownika i odpowiednio je udostępniać. Jednak wyniki mogą być naprawdę imponujące pod względem wydajności.