抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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:007576
用户头像

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

关注

评论

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

Kubernetes 的自动伸缩你用对了吗?

张晓辉

Kubernetes k8s最佳实践

内嵌双向链表的设计与实现

实力程序员

Webpack 系列:如何编写loader

范文杰

webpack 六月日更

模块六作业

c

架构实战营

待办事项列表,敏捷项目管理的核心工件

万事ONES

Scrum 敏捷 研发管理 ONES

小白必看的,JS中循环语句大集合

华为云开发者社区

JavaScript js 循环语句 while循环 for循环

聊聊追求测试技术导致过度测试

陈磊@Criss

证券互动问答平台关键词监控提醒

木头

互动平台 证券监控 股市消息 监控提醒

六一儿童节 | TcaplusDB祝大小朋友节日快乐

数据人er

数据库 nosql tencentdb TcaplusDB

企业应用AI之路怎么走?飞桨实践有真知

百度大脑

AI 飞桨

百度灵医智惠明星案例获人民日报点赞:智慧医疗让看病更便捷

百度大脑

人工智能 智慧医疗

密码学系列之:生日攻击

程序那些事

加密解密 密码学 程序那些事

TcaplusDB小知识之TcaplusDB限制条件

数据人er

数据库 nosql tencentdb TcaplusDB

春色满园关不住,带你体验阿里云 Knative

阿里巴巴云原生

云原生

Java 并发编程——线程池开篇

Antway

6月日更 6 月日更

带你剖析鸿蒙轻内核任务栈的源代码

华为云开发者社区

鸿蒙 任务栈 任务调度 任务上下文

开发感想 基于8051的数据采集系统(科技向)

万里无云万里天

经验总结 6月日更

质量分析工具-监控大厅大揭秘

anyRTC开发者

音视频 WebRTC sdk

理解Linux之文件I/O——知其然,知其所以然

奔着腾讯去

文件管理 Linux内核 文件I/O I/O模型

TcaplusDB | 行业新闻汇编(6月1日)

数据人er

数据库 游戏 tencentdb TcaplusDB

构建高可用的MySQL

林一

MySQ MySQL 高可用 Maxscale

如何进行可视化大屏视觉设计?

博文视点Broadview

一文教会你认识Vuex状态机

华为云开发者社区

Vue 应用 vuex 事件 父子组件

那个陪我打王者的兄弟进了阿里

艾小仙

宜兴牵手百度智能云共建人工智能应用中心,推动数字经济创新发展

百度大脑

人工智能

☕️【Java技术之旅】站在Linux操作系统角度去看Thread(线程)

李浩宇/Alex

线程 Thread 6月日更 6 月日更 内核线程

线程中数据安全的可见性--volatile

卢卡多多

volatile 线程 进程 可见性 六月日更

想做DBA,多租户管理你一定要知道这些

华为云开发者社区

多租户 GaussDB(DWS) 资源池 存储空间 资源隔离

【LeetCode】从上到下打印二叉树 Java题解

HQ数字卡

算法 LeetCode 6月日更

如何针对美工与设计师的Maya工具进行版本控制

龙智—DevOps解决方案

如何科学制定和管理项目计划?

万事ONES

项目管理 ONES 项目经理

Study Go: From Zero to Hero

Study Go: From Zero to Hero

Google开源Brotli压缩算法-InfoQ