写点什么

Google 开源 Brotli 压缩算法

2015 年 10 月 07 日

谷歌非常重视互联网用户的体验,而提升网页加载速度是提升用户体验的一种重要方式。两年前,他们发布了 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 读者交流群)。

2015 年 10 月 07 日 19:007343
用户头像

发布了 1008 篇内容, 共 314.4 次阅读, 收获喜欢 283 次。

关注

评论

发布
暂无评论
发现更多内容

如何快速对应用系统做一个360度画像诊断?

姜戈

Java 运维 多线程 网络 内存

Redis 命令执行过程(上)

程序员历小冰

redis 源码分析

Scrum精髓 - Scrum的核心到底是什么

Bob Jiang

Scrum 敏捷 Scrum精髓 敏捷精髓

作为自由职业者,我的近况

一尘观世界

程序员 自由职业 复盘

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (三)单元测试在整个测试体系中的位置

编程道与术

软件测试 TDD 单元测试 集成测试 验收测试

理解雾计算(Fog Computing)与边缘计算(Edge Computing)

老任物联网杂谈

雾计算 Fog Computing 边缘计算 Edge Computing

关于查尔斯-斯特里克兰

黄大路

提升认知 小说 个人提升 认识自己

关于职能型团队管理一些总结

黄大路

项目管理 管理

一个 UED 团队的自我修养

oldj

团队管理 UED

MacOS高效使用指南-我的体系化方案以及软件清单

lmymirror

高效工作 效率工具 知识管理 Mac 操作系统

产品经理中必会SQL技能,相关内容研发可不予支持

韩超

MySQL sql 产品经理

读 Go Scheduler 有感:给产品经理的建议

Ya

程序员 产品经理 操作系统 OS Scheduler

拜托,别再问我Zookeeper如何实现分布式锁了!

不才陈某

zookeeper 分布式 后端 分布式锁

使用人工智能技术改进面试机器人

陆道峰

人工智能 学习 聊天机器人

游戏夜读 | 联网才能玩的单机

game1night

面试官浅析程序员面试过程中的二三事

joe

互联网 个人成长 方法 职场 文化

深入浅出虚拟内存

helloworld

c c++ C#

每日算法之leetcode 50 Power

田镇珲

递归 LeetCode 分治

做程序员有未来吗

这小胖猫

程序员 个人成长 职业规划 技术人

向上管理第一项:路径P背后的目标B

kimmking

管理

来了来了,2020 首场 Meetup ,可!

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

腊鸡与猴儿

黄大路

人生 小说

直播电商行业一些看法

黄大路

互联网 商业 商业模式 商业价值 行业资讯

Java 环境配置与编辑器使用

旭霁

Java IDEA

高仿瑞幸小程序 04 小程序的全局数据

曾伟@喵先森

小程序 微信小程序 前端

Elasticsearch原理讲透了!

for

lucene elasticsearch 倒排索引 分布式搜索引擎 数据的分片和备份

数据挖掘|cross_val_score交叉验证使用

黄大路

Python 数据挖掘 学习 数据分析

数据湖引擎是什么鬼

数据社

大数据 数据仓库 数据湖 数据架构

时间足够爱你

rmrf

学习 思考 持之以恒

Java并发编程--ReentrantLock

Java收录阁

并发编程

以不变应万变——复杂系统回归测试新思路

刘华Kenneth

DevOps 敏捷 测试 单体系统 复杂

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

Google开源Brotli压缩算法-InfoQ