brotli 省带宽需参数调优,非默认启用即可;关键在压缩级别(-q 4–6)、窗口大小、静态字典和 mime 类型范围四者协同。

直接启用 Brotli 并不等于自动省下 20% 带宽。真正起效的是针对性参数调优,尤其在弱网、移动设备和高并发场景下——压缩级别、窗口大小、静态字典和 MIME 类型范围这四点,缺一不可。
压缩级别选 4–6,不是越高越好
Brotli 提供 0–11 共 12 级压缩,但移动端和 CDN 边缘节点不适用高压缩档位:
-
-q 4~6 是黄金区间:HTML/JS/CSS 用
-q 5,API JSON 响应用-q 4(兼顾解压速度与吞吐) - 避免 -q 9~11:压缩耗时激增 3 倍以上,对小文件(
- 别用 -q 0~1:压缩率仅比 gzip 高 5–8%,浪费了 Brotli 的核心优势
窗口大小设为 256KB(lgwin=18)
窗口大小决定 LZ77 查重范围,直接影响跨帧重复内容的识别能力:
- lgwin=18(256KB)适配弱网分片规律:覆盖 95% 以上的 HTTP/2 帧(16–64KB)和 TCP 分片(1200–1400 字节)
- 不建议 lgwin:HTML 模板类结构重复多,压缩率明显下降
- 避开 lgwin=24(16MB):内存占用飙升、首字节延迟增加,边缘节点解压稳定性下降
必须启用静态字典与预压缩
Brotli 内置针对 Web 文本优化的静态字典,能显著提升 HTML/CSS/JS 的压缩密度:
-
服务端开启
brotli_static on(Nginx)或precompressed br(Caddy),优先服务 .br 后缀预压缩文件 -
构建阶段批量生成 .br 文件:例如用
find ./dist -name "*.js" -exec brotli -q 5 -k {} \;,-k 参数保留原始时间戳便于缓存校验 -
CDN 场景(如又拍云)默认支持:只要响应满足
Content-Length > 256且请求头含Accept-Encoding: br,即自动回源并缓存 br 版本
MIME 类型与最小长度要精准控制
盲目扩大压缩范围反而增加无效开销:
-
只压缩文本类资源:明确设置
brotli_types text/html text/css application/javascript application/json image/svg+xml,排除图片、字体等已压缩格式 -
设定最小压缩阈值:
brotli_min_length 256(单位字节),避免对极小响应(如空 JSON、304 响应)做无谓压缩 -
配合
brotli_vary on:确保 CDN 和浏览器正确识别并缓存不同编码版本,防止 br/gzip 混淆导致降级失效










