使用壓縮字典改善 Google 搜尋

發布日期:2025 年 5 月 14 日

Compression Dictionary Transport 是新標準,可讓我們在各項要求中壓縮重複內容,並在 2024 年底的 Chrome 130 版本中發布。Google 搜尋已採用這項新技術,並獲得大幅改善。

契機

我們造訪的網頁中有很多重複內容。同一個網站上的許多網頁都包含大量相同的程式碼,無論是 HTML、CSS 或 JavaScript,只有程式碼之間的內容會有所變動。雖然每個結果都是由數百個功能組合而成,產生完全不同的內容,但用於產生這些結果的程式碼仍有許多共同點。

無論輸入的搜尋字詞為何,大多數的搜尋結果頁面在視覺上都有些相似:頂端有 Google 標誌、搜尋列和一些控制項。中間是搜尋類型的分頁,左側是搜尋結果清單,中間穿插各種小工具,方便使用者操作,右側則是「about」面板,提供額外背景資訊:

典型的 Google 搜尋結果頁面,頂端有搜尋列,左側主欄有結果,右側則有其他資訊
Google 搜尋結果頁面

最後,我們在底部加入了分頁選項和標準頁尾。這只是視覺上可用的內容,幕後有許多程式碼 (HTML、CSS 和 JavaScript) 用於產生這個網頁。為了提升效能,這類程式碼大多會直接內嵌到網頁的 HTML 中。雖然這確實可加快網頁載入速度,但代價是無法在不同結果網頁之間共用該程式碼,這類情況可透過外部快取資源來解決。

網路上的壓縮功能

壓縮是網路上廣泛使用的技術。使用 gzip 或 Brotli 或 Zstandard 等較新的演算法壓縮資源,可避免檔案內重複的內容,並在傳送前盡可能在伺服器上將所有資訊打包。瀏覽器接著就能解壓縮位元組,還原原始內容。對於圖片而言,有損壓縮技術也能提供類似的優點,因為它會移除使用者可能無法察覺的額外位元組。

直到最近,網路上的壓縮功能才可壓縮資源內的內容。無法跨不同資源進行壓縮,更不可能跨不同頁面進行壓縮。這項限制一直是網頁工程師試圖修正的缺陷。

壓縮字典傳輸功能來救援!

Browser Support

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

Source

壓縮字典傳輸功能是一種新標準,可透過共用「字典」壓縮資源,讓常見的位元組序列取代為該共用字典的參照。

Brotli 和 Zstandard 等新型壓縮演算法支援使用常用字詞的字典,可透過將這些字詞替換為字典中較小的參照項目,進一步提升壓縮率。Brotli 甚至內建了常見網頁用詞的字典。壓縮字典傳輸功能則在此基礎上,提供伺服器和瀏覽器共用自訂字典的方式。

自訂字典可以是網站上已使用的資源,舉例來說,您可以使用 app.v1.js 做為字典,在下載 app.v2.js 時,基本上只下載差異 (通常稱為「差異壓縮」)。或者,您也可以使用 <link rel="compression-dictionary"> 標記 (或等同的 Link HTTP 標頭) 指定個別的字典資源。

這樣一來,資源的下載大小就能大幅縮減,因為資源包含大量共用內容或程式碼,例如前述的搜尋結果網頁。

Google 搜尋使用壓縮字典

Google 搜尋團隊持續致力於改善搜尋成效。他們看到壓縮字典的潛力,因此成為早期採用者。

搜尋服務會使用共用 Brotli 壓縮功能處理結果網頁,並使用從代表性搜尋結果樣本建立的獨立字典檔案。穩健的自動化管道可確保字典保持最新狀態,隨時因應 SRP 內容經常變更 (每天發布多次) 而調整。您可以使用開發人員工具查看確切的運作方式。

當用戶端首次載入搜尋結果網頁時,伺服器會使用 Link: HTTP 標頭提供字典連結,標頭類型為 rel=compression-dictionary

Chrome 開發人員工具中的回應 HTTP 標頭,其中 Link rel=compression-dictionary 標頭已醒目顯示
Chrome 開發人員工具在「Network」分頁中顯示 Link 標頭

如果用戶端支援 Brotli 字典壓縮功能,但尚未快取共用字典,瀏覽器會在閒置時間下載這份字典。字典回應包含 Use-As-Dictionary 回應標頭,可告知瀏覽器可使用此字典的資源:

Chrome 開發人員工具中的回應 HTTP 標頭,其中以 Use-As-Dictionary 標頭醒目顯示
Chrome 開發人員工具在「Network」分頁中顯示 Use-As-Dictionary 標頭

字典會使用標準 cache-control 語意,並可供任何符合該標頭中定義規則的資源使用,在本例中,這些資源是開頭為 /search 的網頁。

日後在載入搜尋結果頁面時,瀏覽器可以使用 Available-Dictionary HTTP 要求標頭,告知伺服器它有字典。重新載入頁面後,您會看到以下畫面:

Chrome 開發人員工具中的回應 HTTP 標頭,其中 Available-Dictionary 標頭已醒目顯示
Chrome 開發人員工具在「Network」分頁中顯示 Available-Dictionary 標頭

啟用「Preserve log」核取方塊並進行篩選後,我們可以比較這兩種回應:

比較兩次下載相同資源的結果,上方為 107 KB,下方為 60 KB
Chrome 開發人員工具網路分頁

在這個範例中,第一個要求是完整的 107 KB 回應,並使用 Brotli (br) 壓縮,而第二個重新載入要求的大小約為 60 KB,並使用字典壓縮 Brotli (dcb) 壓縮,因此下載時間較快。

在 Chrome 中,您可以查看 chrome://net-internals/#sharedDictionary 頁面,查看共用字典並清除這些字典,以便從頭重複這個範例。

「Shared Dictionary」頁面顯示一個共用字典
Net-Internals #sharedDictionary 頁面

成果

這項異動於 2025 年春季推出,最初僅適用於 Chrome 使用者。與標準 Brotli 壓縮方式相比,這項功能可將所有 Chrome 使用者的 HTML 酬載平均大小縮減 23%。這個整體平均值包含未使用字典壓縮的結果 (例如沒有字典的初次使用者),以及使用字典壓縮的搜尋結果。對於字典壓縮結果,節省的空間更大,如前述範例所示,可節省近 50% 的空間。

這項改良措施讓最大內容繪製 (LCP) 整體提升 1.7%,在高延遲網路上更可達 9%。這項數據看似不大,但 Google 搜尋是經過超級最佳化的網站,因此這麼大的增幅就顯得相當可觀。其他網站可能會因這項技術獲得更大的效能提升。

歡迎在你的網站上試用這項功能!

壓縮字典傳輸功能現已可在所有以 Chromium 為基礎的瀏覽器 (Chrome、Edge、Opera 等) 中使用。這是漸進式增強功能,不支援的瀏覽器會忽略這項功能,但隨著更多瀏覽器支援這項功能,這些瀏覽器也能受惠。

這項技術解決的挑戰並非 Google 搜尋專屬,許多網站都能從壓縮字典傳輸功能中受益,無論是使用搜尋功能等獨立字典,或是使用現有資源做為字典 (例如推出新版本時的舊版應用程式),皆可獲得助益。

請參閱 MDN 指南,進一步瞭解這項技術的運作方式,以及如何在網站上導入這項技術。

這確實需要在伺服器或建構程序中進行一些設定,才能建立以字典為基礎的壓縮資源,並視情況提供這些資源。不過,從效能來看,這麼做確實能帶來令人驚豔的成果!