发布时间:2025 年 5 月 14 日
压缩字典传输是一种新标准,可让我们跨请求压缩重复内容,并于 2024 年底在 Chrome 130 中发布。Google 搜索已采用这项新技术,并取得了显著改进。
机会
我们访问的网页中有很多重复内容。同一网站上的许多网页都包含大量相同的代码(无论是 HTML、CSS 还是 JavaScript),只是这些代码之间的内容会发生变化。虽然每个结果都是数百个特征的独特组合,从而产生完全独特的内容,但发送到浏览器以生成这些内容的代码中仍然存在许多共同之处。
从视觉上看,无论输入什么搜索字词,大多数搜索结果页都有些相似:顶部有 Google 徽标、搜索栏和一些控件。中间是一些用于显示搜索类型的标签页,左侧是搜索结果列表,其中穿插着各种有助于用户的 widget,右侧则是包含“关于”面板的其他背景信息:

最后,底部是分页选项和标准页脚。这只是可视内容,背后还有大量代码(HTML、CSS 和 JavaScript)来生成此网页。为了优化性能,此类代码的大部分会直接内嵌到网页的 HTML 中。虽然这样可以加快网页加载速度,但代价是无法在不同的结果页面之间共享该代码(外部缓存的资源可以做到这一点)。
网页上的压缩
压缩是 Web 上广泛使用的技术。使用 gzip 或 Brotli 或 Zstandard 等较新算法压缩资源,可避免文件中出现重复,并通过无损压缩在发送之前尽可能紧密地在服务器上打包所有信息。然后,浏览器可以解压缩压缩的字节以恢复原始内容。对于图片,丢失式压缩通过移除对用户来说可能没有明显差异的额外字节,也能提供类似的好处。
直到最近,网络上的压缩功能仅限于资源内部压缩。无法跨不同资源进行压缩,更无法跨不同网页进行压缩。这一直被认为是 Web 工程师想要解决的一个限制。
压缩字典传输功能大显身手!
压缩字典传输是一种新标准,可通过使用共享“字典”在资源之间进行压缩,从而允许常见的字节序列替换为该共享字典中的引用。
Brotli 和 Zstandard 等新型压缩算法支持使用常用字词字典,通过将这些字词替换为对字典的更小引用,从而实现更高的压缩率。Brotli 甚至附带一个内置的常用网络术语字典。压缩字典传输在此基础上,为服务器和浏览器提供了共享自定义字典的方法。
自定义字典可以是网站上已使用的资源。例如,在下载 app.v2.js
时,您可以将 app.v1.js
用作字典,这样基本上只会下载差异(通常称为“增量压缩”)。或者,您也可以使用 <link rel="compression-dictionary">
标记(或等效的 Link
HTTP 标头)指定单独的字典资源。
这可以大幅缩减包含大量共享内容或代码的资源(例如前面提到的搜索结果页)的下载大小。
Google 搜索对压缩字典的使用
Google 搜索团队一直在努力提升 Google 搜索的效果。他们看到了压缩字典的潜力,因此成为了压缩字典的早期采用者。
Google 搜索会对其搜索结果页使用共享 Brotli 压缩,并使用由代表性搜索结果样本构建的单独字典文件。强大的自动化流水线可确保字典保持最新状态,与每天发布多次的 SRP 内容保持同步。您可以使用 DevTools 来了解其具体运作方式。
当客户端首次加载搜索结果页时,服务器会使用类型为 rel=compression-dictionary
的 Link:
HTTP 标头提供指向字典的链接:

Link
标头如果客户端支持 Brotli 字典压缩,但尚未缓存共享字典,则浏览器会在空闲时下载此字典。字典响应包含 Use-As-Dictionary
响应标头,用于告知浏览器可以将此字典用于哪些资源:

Use-As-Dictionary
标头该字典将使用标准 cache-control
语义,并可供与该标头中定义的规则匹配的任何资源使用(在此示例中,就是以 /search
开头的网页)。
在日后加载搜索结果页时,浏览器可以使用 Available-Dictionary
HTTP 请求标头告知服务器它有字典。重新加载页面后,您会看到以下效果:

Available-Dictionary
标头启用 Preserve log 复选框并进行过滤后,我们可以比较这两种响应:

在此示例中,第一个请求是完整的 107 KB 响应,并使用 Brotli (br
) 压缩,而第二个重新加载请求的大小几乎只有前者的一半,为 60 KB,并使用字典压缩 Brotli (dcb
) 压缩,因此下载时间更短。
在 Chrome 中,您可以查看 chrome://net-internals/#sharedDictionary
页面来查看共享字典并清除它们,以便从头开始重复此示例。

#sharedDictionary
页面成果
这项变更于 2025 年春季面向 Google 搜索用户推出,最初面向 Chrome 用户。与标准 Brotli 压缩相比,这将所有 Chrome 用户的 HTML 载荷平均大小缩减了 23%。此总体平均值同时涵盖未压缩字典的结果(例如没有字典的首次用户)和压缩字典的搜索结果。对于经过字典压缩的结果,节省的空间会更大,正如我们在前面的示例中看到的,节省了近 50%。
这使得 Largest Contentful Paint (LCP) 总体得分提高了 1.7%,在高延迟网络上最高提高了 9%。这看起来可能不大,但 Google 搜索是一个经过极致优化的网站,因此如此大的增幅非常可观。其他网站在使用这项技术后,效果可能会更好。
在您的网站上试用一下!
压缩字典传输功能现已可在所有基于 Chromium 的浏览器(Chrome、Edge、Opera 等)中使用。这是一种渐进式增强功能,不支持该功能的浏览器会忽略它,但随着越来越多的浏览器支持该功能,它们也能从中受益。
这项技术所解决的问题远非仅限于 Google 搜索。许多网站都可以从压缩字典传输中受益,无论是使用单独的字典(如 Google 搜索所用),还是使用现有资源作为字典(例如在发布新版本时使用应用的旧版本)。
如需详细了解此技术的运作方式以及如何在您的网站上实现它,请参阅 MDN 指南。
这确实需要在服务器或构建流程中进行一些设置,以创建基于字典的压缩资源并酌情提供这些资源,但从性能方面来看,效果会非常出色!