not a better man

前端技术

gzip与brotli压缩算法对比

网传的压缩比

上面这幅图是比各种无损压缩算法的压缩比,其中提到brotli压缩比gzip的要高。最近一直搞新版数图首页的优化,新版数图的首页各种资源加起来有3.6MB ,各种优化手段都使用上,基本上连1个RTT的时延都不想放弃,当然经过有,数图首页的加载时间基本上平均在948ms内。其中利用到阿里云的cdn服务。

阿里云目前的cdn服务开始支持quic协议(实验性质的),目前这个估计是在收集用户数据。和运维的同学一系列的沟通,终于说服他们在这个星期开启了cdn 支持TLS1.3协议并开启brotli压缩算法

浏览器对brotli协议的支持

浏览器对brotli支持情况

从上图可以看出浏览器对brotli的支持还是不错的。

并不是所有的浏览器都支持brotli压缩算法,如果cdn服务同时开启了gzip,brotli压缩算法该怎么办,http协议会帮我们解决这个问题。

当我们向cdn缓存服务请求一个文本资源,如js,css,html资源时,请求头会携带如下信息


accept-encoding: gzip, deflate, br

当服务端收到请求的时候,如果只支持gzip协议,那么响应头会有如下信息

content-encoding: gzip

现在cdn服务商都支持brotli和gzip压缩算法,如阿里云的设置中就添加对brotli的支持。

阿里云对cdn的支持要自己手动开启

但是在自己做对比试验的时候,发现开启brotli压缩算法,并没有比开启gzip算法,在网络上的传输要降低,反而升高了,演示视频如下视频所示。

阿里云 gzip vs brotli对比

阿里云在描述中说b’rotli会提高10-25%的压缩比,但是测试过程的比较如下

原生文件大小gzipbrotli
500KB186kB200KB

brotli的压缩比并没有比gzip压缩比高,原因出现在哪呢,个人猜测是因为阿里云cdn服务在设置gzip压缩和brotli压缩的时候,压缩比并不一致。

在和阿里云的同学沟通后,如我所料,阿里云的brotli压缩算法,默认等级为level,当让他们配合将其压缩等级设置为level4的时候,压缩的比gzip要少个17%左右。

下面的图片是各种压缩算法的在不同level下的比较

不同压缩算法的比较

从图中可以看出brotli vs gzip 的压缩算法 总体来说brotli的总体性能更好,尤其是解压速度。我们在选择brotli算法或gzip时,需要根据实际场景进行调优

参考资料

https://quixdb.github.io/squash-benchmark

https://github.com/google/brotli

发表评论