谷歌非常重视互联网用户的体验,而提升网页加载速度是提升用户体验的一种重要方式。两年前,他们发布了 Zotfli 压缩算法。该算法在默认设置下的输出比zlib的最大压缩比输出还要小3-8%。PNG优化器、Web内容预处理等许多压缩方案中都集成了该算法。基于该算法的应用情况,结合其它现代压缩需求,谷歌开发并开源了一个新的算法—— Brotli 压缩算法。该算法由谷歌压缩团队的Jyrki Alakuijala和Zoltan Szabadka开发,其中Jyrki亦是Zotfli压缩算法的创建者。
不同于Zopfli兼容 Deflate ,Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比。据谷歌 研究 ,Brotli压缩速度同zlib的Deflate实现大致相同,而在 Canterbury语料库 上的压缩密度比 LZMA 和 bzip2 略大。
谷歌对这种数据格式寄予了厚望,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读者交流群 )。