brotli压缩等级需分层设定:动态内容用3–5级(level 4为平衡点),静态资源预压缩用6–7级;须配合brotli_min_length、brotli_window等参数,并验证content-encoding: br响应头及体积缩减17–25%。

Brotli 压缩等级(brotli_comp_level)直接影响 CPU 开销与压缩率,不能盲目设高。它支持 0–11 共 12 级,但实际生产中需按资源类型和请求特征分层设定,否则可能造成响应延迟上升或压缩收益递减。
动态内容推荐 3–5 级
API 返回、PHP/Node 渲染的 HTML、实时生成的 JSON 等,特点是高频、低缓存命中、不可预压。这类内容若用过高 level(如 ≥8),会显著拖慢首字节时间(TTFB),尤其在并发高时 CPU 占用陡增。
- level 3:适合对延迟敏感的接口,压缩率接近 Gzip level 6,CPU 开销极低
- level 4:通用平衡点,比 Gzip level 6 高约 18% 压缩率,Nginx 处理开销可控
- level 5:可接受的上限,再往上压缩率提升不足 2%,但 CPU 时间可能翻倍
静态资源推荐 6–7 级
CSS、JS、HTML 等构建期固定的文件,更适合压得更狠——前提是已启用 brotli_static on 预压缩(即提前生成 .br 文件)。此时运行时无压缩计算,level 只影响预处理阶段,可放心设高。
- level 6:覆盖绝大多数文本资源,压缩率比 Gzip level 9 高约 20%,构建耗时增加有限
- level 7:对长文本(如大型 JS bundle)收益明显,但 level 8 起构建时间增长快、体积缩减微弱,不建议
必须配合的约束参数
仅调 level 不够,还需限制作用范围,避免无效压缩:
-
brotli_min_length 20:小于 20 字节的响应不压缩(如空 JSON{}),防止负优化 -
brotli_buffers 16 8k:匹配常见文本大小,避免频繁内存分配 -
brotli_window 1m:对含大量重复结构的 HTML 或模板类资源,增大窗口可提升长距离匹配效率
验证是否真正生效
配置后务必检查两点:
- 用
curl -I -H "Accept-Encoding: br" https://yoursite.com/main.js查看响应头是否有Content-Encoding: br - 对比同文件开启 Brotli 前后的体积(如 JS 从 124KB → 92KB),确认压缩率提升符合预期(通常应比 Gzip 低 17–25%)











