压缩等级:更高不等于更好

Brotli 最高等级比中等等级慢很多,体积却只小一点。动态内容用最高等级往往是净亏损。

6 分钟协议与压缩
压缩等级:更高不等于更好

要点

静态资源可以预压缩到最高等级(成本一次性);动态内容要用中等等级,压缩耗时会直接加到响应时间上。

本文目录
  1. 01收益递减曲线
  2. 02静态与动态要分开对待
  3. 03怎么确认配置生效

收益递减曲线

压缩等级越高,体积越小、耗时越长。但这两条曲线的形状不同:体积下降很快趋于平缓,耗时上升却越来越陡。

等级区间体积收益CPU 耗时适用场景
低(1–3)大部分收益已拿到很低实时压缩大响应
中(4–6)接近最优适中动态内容的推荐区间
高(7–9)继续小幅下降明显上升静态资源预压缩
最高(10–11)收益很小大幅上升仅预压缩,不用于实时
等级编号以 Brotli 为例(0–11);gzip 为 1–9,形状类似。

静态与动态要分开对待

关键区别是「压缩几次」

静态资源在构建时压缩一次,之后无限次复用——用最高等级完全值得,那点 CPU 时间摊到无数次请求上等于零。动态响应每次请求都要重新压缩,压缩耗时直接加在用户的等待时间里。

  • 构建产物(JS/CSS/字体):预压缩到最高等级,同时产出 .br 和 .gz 两份;
  • API 与 SSR 响应:用中等等级实时压缩;
  • 小于约 1KB 的响应:不压缩,压缩头的开销可能超过收益;
  • 已压缩格式(JPEG、PNG、MP4、zip):不要再压,白花 CPU。

怎么确认配置生效

# 请求
Accept-Encoding: br, gzip

# 期望的响应
Content-Encoding: br
Vary: Accept-Encoding

如果响应没有 Content-Encoding,说明压缩没生效——常见原因是 CDN 的压缩开关只对白名单 MIME 类型生效,而你的响应 Content-Type 不在其中。

在你的网站验证

边缘核验确认你的资源实际使用的压缩算法与体积