直接答案:36 个文章页的 4.22 MB 原始 HTML,用 gzip -9 重压缩后是 663 KB(15.7%),brotli -q11 后是 493 KB(11.7%)。线上对同一批 10 个站点各取 1 条文章 URL 实测:10/10 返回 gzip,0/10 使用 brotli;wire/decoded 中位 26.9%(14.4%–45.8%)。

所以第 89 期的 4.22 MB 是文档字节,不是传输字节。但“已经 gzip”也不等于“已经用上更好的压缩”:本期线上探测里没有一个站点返回 brotli。

15.7%
gzip 后 / 原始
11.7%
brotli 后 / 原始
10/10
线上返回 gzip
0/10
线上使用 brotli

方法:本地重压缩 + 线上编码探测

本地:读取第 83 期缓存的 36 个文章页原始 HTML(与第 89 期同一批),分别用 gzip.compress(data, 9) 与 brotli.compress(data, quality=11) 压缩,比较原始、gzip、brotli 字节。这是实验室上限,不是服务器默认档。

线上:对同一批 36 页所属的 10 个站点,各取该站第一条 status=200 的文章 URL,发一次 GET,请求头带 Accept-Encoding: gzip, br,记录 HTTP 状态、Content-Encoding、Content-Type、实际收到的字节(wire)、解码后的字节(decoded)与错误;站点间隔 1.5 秒,超时 25 秒。

项本地重压缩线上实测
样本36 页缓存 HTML10 站各 1 条 URL
比较对象raw / gzip / brotli 字节wire / decoded 字节
压缩档gzip 9、brotli quality 11服务器实际选择
能否代表站点不能,只代表这批 HTML 的可压缩性不能,单条 URL 只是探测点

结果:gzip 15.7%,brotli 11.7%

口径原始压缩后占原始节省
gzip -94,220,772663,07515.7%84.3%
brotli -q114,220,772493,18711.7%88.3%
brotli 相对 gzip663,075493,18774.4%25.6%

按页看,gzip 占比中位 15.9%(10.0%–34.9%),brotli 中位 11.3%(7.1%–27.4%)。压缩率最高的是 SVG/模板占比大的页面,最低的是文字占比高、重复结构少的页面。

压缩后占原始gzip 页数brotli 页数
低于 12%(brotli 低于 9%)611
12%–16%(brotli 9%–12%)128
16%–20%(brotli 12%–16%)109
20% 以上(brotli 16% 以上)88

线上:10 个站点全部 gzip,没有一个 brotli

站点状态Content-Encodingwire 字节decoded 字节wire/decoded
E03200gzip14,85955,49426.8%
E06200gzip10,89037,68228.9%
E09200gzip16,63985,42319.5%
E14200gzip13,67372,14319.0%
E16200gzip8,71619,02645.8%
E19200gzip5,03422,16022.7%
E22200gzip22,530156,70114.4%
E23200gzip83,342308,34027.0%
E26200gzip11,81637,10031.8%
E28200gzip8,57326,92831.8%

线上页面与 2026-11-03 缓存可能不同(例如 E03 的 decoded 只有 55,494 字节,而缓存 raw 是 155,211 字节),因此本表只在同一响应内比较 wire 与 decoded,不与本地 raw 直接相减。

10 条 URL 的 wire 合计 196,072 字节,decoded 合计 820,997 字节,整体 23.9%。但这是当前线上内容,不是缓存那 4.22 MB;两组数字不能混算。

SVG 越多,压缩率越高

把第 89 期的内联 SVG 占比与本期的 gzip 占比按同一页配对,36 页的 Pearson 相关系数为 -0.568:SVG/模板占比越高,gzip 后占原始的比例越低。这是关联,不是因果;它符合“重复结构更容易压缩”的直觉,但不能据此说 SVG 没有成本——它仍然增加解析、内存与首字节前的传输量。

为什么本地 15.7% 与线上中位 26.9% 不同

两组数字不可直接比较:本地是对缓存文档做 gzip -9 / brotli -q11;线上是服务器对当前页面选择压缩档,且页面内容、大小与 11 月 3 日缓存不同。线上中位更高,可能来自更低的 gzip 档、不同的内容或动态页面,但本期没有逐个核对服务器配置,不能归因。

对验收的启示

  1. 分开记“文档大小”和“传输大小”。 4.22 MB 的 HTML 经 gzip 后约 663 KB;只报原始体积会高估传输压力。
  2. 检查 Content-Encoding,不只看页面大小。 10 个站点都返回 gzip,但没有一个用 brotli;是否启用是服务器/CDN 决策。
  3. 把 brotli 当作可询价的选项。 在本样本里,brotli 比 gzip 再小 25.6%;实际收益取决于内容与服务器档位。
  4. 单条 URL 不是全站结论。 同一站点不同路径、不同类型、不同边缘节点可能不同;验收应覆盖首页、文章页与关键着陆页。
  5. 压缩率不是性能评分。 本期不测 TTFB、LCP、解析或 CrUX;压缩只是传输体积的一个代理。

局限

  • 本地是实验室上限:gzip 9 / brotli 11 不是服务器默认档,结果只说明可压缩性。
  • 线上只有 10 条 URL:每站 1 条,不能代表站点全量或所有路径。
  • 内容可能已变:线上 decoded 与 2026-11-03 缓存不同,不能与本地 raw 相减。
  • 只测 HTML:不含图片、CSS、JS、字体与 HTTP 头。
  • 单时间窗:2026-11-06 20:42 一次;未跨天复测。
  • pilot:10 站 36 页,不外推行业。

数据与复算

本地压缩:equipment-article-html-compression-2026.csv(36 行 × 9 列:原始/gzip/brotli 字节与占比、节省比例)。线上编码:equipment-live-content-encoding-2026.csv(10 行 × 10 列:状态、Content-Encoding、Content-Type、wire/decoded 字节与占比、错误、时间)。仓库内为 docs/research/2026-11-article-html-compression.csv 与 2026-11-live-content-encoding.csv。

探测:scripts/article_html_compression_probe.py(local / live 两个子命令);单元测试 scripts/test_article_html_compression_probe.py(无网络,7 项,覆盖 gzip/brotli 压缩、解码、百分比与未知编码)。运行:

python -m unittest scripts.test_article_html_compression_probe

配套:文章页 HTML 体积组成 pilot、文章页图片交付 pilot、首页静态资源清单。

数据来源与口径

  1. 缓存页面:第 83 期 10 站 36 页(2026-11-03 08:40–08:41)。
  2. 本地压缩:2026-11-06,gzip -9 与 brotli quality 11,UTF-8 原始字节。
  3. 线上探测:2026-11-06 20:42,10 站各 1 条 URL,Accept-Encoding: gzip, br。
  4. 状态与编码按实际返回记录;不对未返回的编码做推断。

相关:文章页内联 SVG 重复度 pilot。

相关:首页 HTML 体积组成 pilot。

相关:首页 HTML 压缩与编码 pilot。

关于作者

凌壹信息Official(交付团队),负责企业网站、品牌与智能制造项目的需求梳理、方案与验收协作。本文把本地重压缩与线上 Content-Encoding 分开报告,不把实验室档位当服务器配置,也不把单条 URL 当站点全量;10 站 36 页 pilot,不外推行业。

HTML 大,不等于传输大

4.22 MB HTML,gzip 后约 663 KB;10 站实测全部 gzip、0 个 brotli。

预约内容验收方案