Developer Toolbox

Brotli

看看 Brotli 比 gzip 多做了什么:内置常用词字典、更大的窗口,以及用时间换取大小的质量级别。

  • 窗口:最大 16 MB
  • 字典:122 KB
  • 质量:0-11
  • 编码依赖上下文
这些是什么意思?
  • 内置字典:每个 Brotli 解码器都知道的约 13,500 个词,所以编码器可以用编号引用一个词。
  • 质量:Brotli 的力度设置,从 0 到 11。级别越高,搜索越费力,只为再小几个百分点,代价却是好几倍。
  • 上下文建模:根据紧挨着的前文选择编码表,因为字母后面常见的字符与数字或空格后面的不同。
  • 窗口:压缩器最远可以回头多远寻找重复。gzip 是 32 KB,Brotli 最大 16 MB。

Brotli 字典中的词

粘贴任意文本。Brotli 字典中收录的词会被标出,条形图把字典作用最大的前 300 字节与整段文本进行比较。

输入

加载中...

试试看: 加载一个简短的 HTML 页面。只有几百字节时,结果由字典决定,Brotli 会明显领先 gzip。

质量、大小与时间

同一段文本,逐个质量级别压缩。到 4-6 为止,大小下降很快,时间几乎不变;10 和 11 要多花好几倍的工作,只换来几个百分点。

加载中...

与 gzip 的区别

最大 16 MB 的窗口

gzip 只能从最近的 32 KB 中复制。Brotli 能回看得远得多,因此在大文件中能找到 gzip 已经看不到的重复。

依赖上下文的编码

同一个字符可能因前面两个字节不同而得到不同的编码。字母后面可能出现的字符,与数字或空格后面的不同。

一开始就有字典

gzip 必须把每个词的第一次出现写成字面量。Brotli 则可以引用内置字典,所以它在小文件上优势最大。

工作原理

Brotli 沿用 gzip 的两个思路,即复制前文和霍夫曼编码,并另外增加三项。它的窗口可达 16 MB,而不是 32 KB,所以能在大文件中找到很远之前的重复。它的编码取决于前面几个字节的上下文。此外,它自带一个约 13,500 个词的字典,收录网页和代码中的常用词,因此像 class 或 function 这样的词即使第一次出现,也可以只用一个简短的引用。

适用场合

Brotli 能让文本比 gzip 再小 15-25%,在小文件上最明显,那里主要靠字典起作用。当前所有浏览器都通过 HTTPS 接受它。静态文件可以提前用质量 11 压缩,动态响应则用 4-6 实时压缩,此时它的速度和 gzip 差不多。