Google 开源 Brotli 压缩算法

阅读数:5502 2015 年 10 月 7 日

话题:Google语言 & 开发架构

谷歌非常重视互联网用户的体验,而提升网页加载速度是提升用户体验的一种重要方式。两年前,他们发布了Zotfli压缩算法。该算法在默认设置下的输出比 zlib 的最大压缩比输出还要小 3-8%。PNG 优化器、Web 内容预处理等许多压缩方案中都集成了该算法。基于该算法的应用情况,结合其它现代压缩需求,谷歌开发并开源了一个新的算法——Brotli压缩算法。该算法由谷歌压缩团队的 Jyrki Alakuijala 和 Zoltan Szabadka 开发,其中 Jyrki 亦是 Zotfli 压缩算法的创建者。

不同于 Zopfli 兼容Deflate,Brotli 是一种全新的数据格式,可以提供比 Zopfli 高 20-26% 的压缩比。据谷歌研究,Brotli 压缩速度同 zlib 的 Deflate 实现大致相同,而在Canterbury 语料库上的压缩密度比LZMAbzip2略大。

谷歌对这种数据格式寄予了厚望,Zoltan 写道:

更小的压缩尺寸可以提供更好的空间利用率和更快的页面加载速度。我们希望,在不远的将来,主流浏览器都能支持这种格式,而且,更小的压缩尺寸会给移动用户带来额外的好处,比如更低的数据传输费用和电量消耗。

谷歌的这份发布公告吸引了许多网友的关注。网友 Szabolcs Péter 指出,Brotli 在 2013 年就已经发布,不应该算是一种新的压缩算法了。对此,Jyrki 答复道:

Brotli 的第一个版本是用于 Web 字体一次性压缩的非对称算法,而现在的 Brotli 已经扩展成为一个通用的无损压缩算法。我们重写了编码器的重要组成部分,提高了压缩比以及编码器和解码器的速度,改进了流 API,增加了质量等级,减少了解码内存占用,并考虑了更多的应用场景,Brotli 在各种平台上的性能也更平衡了。我们今天的发布就是关于这个。我们认为,它已经做好准备吸引更多注意及广泛应用于各种场景。

网友 Lucas Marsh 则对该算法的性能提出了质疑。他在一项基准测试中发现,Brotli 虽然比 bzip 好,但并没有比 LZMA 强。对此,Jyrki 是这样解释的:

从设计上讲,对于非常大的文件,LZMA 和 LZHAM 压缩得更多,尤其是当文件大小超过 16MB 时。提高大文件的压缩比有三个缺点:增加了解码时的内存占用,降低了小文件压缩的性能以及在某种程度上降低了编码和解码速度。Brotli 通常压缩的更多的是 0.5-1MB 的文件。当你有更大的数据,并且不用为解码内存占用担心时,可以通过使用更大的滑动窗口来提高 Brotlin 的性能——对于大文件,可以试下将窗口大小参数设为 24 位(16MB)。


感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。