Brotli 研究实践

简介: 通过配置brotli压缩来提高http请求的压缩率,降低出口带宽,提升访问速度。

一、Brotli简介

          Brotli最初发布于2015年,用于网络字体的离线压缩,brotli这个名字来自瑞士的烘培产品。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。新版本还展现了跨平台的性能改进,以及减少解码所需的内存。

         与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。Brotli是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模等方式进行数据压缩。一个 Brotli 压缩⽂件由 元块(meta-blocks) 集合组成。每个元块最多可容纳 16MiB,由两部分组成:一个 数据部分(data part),它存储 LZ77 压缩的放⼊块,以及一个 标题(header),每个块的压缩遵循经典的 LZ77 压缩⽅案并由计算具有良好的熵的 LZ77 解析和计算 LZ 短语的简洁编码这两个主要阶段组成。Brotli压缩数据格式的规范在RFC7932中定义,使用brotli取代deflate,gzip来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。与其他压缩算法相比(如zip,gzip等),无论是压缩时间,还是压缩体积上看,它都有着更高的效率使用Brotli进行流压缩的内容编码类型已被提议使用“br”。Brotli 的编码器库提供了 12 个质量级别(从 0 到 11)。它们是⽤压缩速度换取压缩效率的压缩模式:更⾼质量的级别速度较慢,但会产⽣更好的压缩⽐。

      简言之,Brotli是开源的一种新型压缩算法,Brotli压缩比Gzip压缩性能更好。开启Brotli压缩功能后,CDN节点会对资源进行智能压缩后返回,缩小传输文件大小,提升文件传输效率,减少带宽消耗。

  • 当源站文件的大小在1 KB-10 MB时,您可以使用智能压缩或Brotli压缩来压缩文件(即1 KB以下、10 MB以上大小的文件不做压缩)。
  • Brotli压缩支持的文件类型有text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、text/javascript、image/tiff、image/svg+xml、application/json、application/xml。
  • 服务端响应携带响应头Content-Encoding: br:服务端响应的内容是经过Brotli压缩后的资源。
  • 客户端请求携带请求头Accept-Encoding: br:客户端希望获取对应资源时进行Brotli压缩。
  • github地址:
    https://github.com/google/ngx_brotli#brotli_ratio
    https://github.com/google/brotli

二、Brotli的发展情况

2.1、浏览器端支持情况,

目前国内外的主流的浏览器都已经支持br压缩,比较早期的浏览器版本就不支持,像IE这些。

1.png

支持情况查看:https://caniuse.com/?search=brotli

网站支持地址检测:https://www.giftofspeed.com/gzip-test/

2.2、服务端支持情况

服务端 支持 描述
nginx ngx_brotli

通过brotli模块实现:https://github.com/google/brotli.git

https://github.com/google/ngx_brotli.git

apache mod_brotli 文档说明:https://www.lanmper.cn/apache/t8858
java commons-compress 通过https://commons.apache.org/proper/commons-compress/ 实现
node.js express-static-gzip 可以通过https://www.npmjs.com/package/express-static-gzip 来支持


2.3、CDN及公有云支持情况

厂商





国内

阿里云

火山云 华为云 天翼云 网宿 腾讯云
国外 cloudflare aws azure 谷歌云

其他 AMD cpu支持





2.4、手机端的支持情况

类型






浏览器 chrome safari uc 华为浏览器 qq浏览器 百度浏览器 微信浏览器
主流APP

目前大部份app的都基于系统的浏览器内核进行调用,目前主流的手机端浏览器均已支持。而少部分app是基于自己开发的浏览器,这部分的支持情况暂不清晰。

而针对app开发这一块可以参考:

https://blog.csdn.net/weixin_44158429/article/details/130252308

https://blog.csdn.net/weixin_39397471/article/details/126135907

2.5、主流网站的支持情况

网站








国内 百度 淘宝 京东 汽车之家 今日头条 知乎 CSDN 微信 bilibili


三、性能及测试数据

3.1、网上搜集的性能数据

2.png

更详细的一些测试性能数据参考地址:https://quixdb.github.io/squash-benchmark/unstable/

3.2、实际压测的性能数据

【1】html类型测试:

类型

压缩机级别

源文件

压缩后

平均请求时间

压缩比【压缩后数据大小/源数据大小】

gzip

1

1084k

154k

38ms

14.206%

gzip

5

1084k

132k

46ms

12.177%

gzip

9

1084k

127k

51ms

11.715%

brotli

1

1084k

174k

33ms

16.051%

brotli

5

1084k

97.5k

43ms

8.994%

brotli

6

1084k

96k

52ms

8.856%

brotli

9

1084k

90.9k

90ms

8.385%

brotli

11

1084k

82.8k

2.52s

6.202%

注:html 的gzip 9级别转brotli 6级别,可以节省24.41%左右的带宽。

【2】js类型测试:

类型

压缩机级别

源文件

压缩后

平均请求时间

压缩比【压缩后数据大小/源数据大小】

gzip

9

1188k

354k

105ms

29.797%

brotli

5

1188k

331k

103ms

27.861%

brotli

6

1188k

326k

115ms

27.441%

brotli

9

1188k

320k

162ms

26.936%

注:js gzip 9级别转brotli 6级别,可以节省7.90%左右的带宽。

【3】css类型测试:

类型

压缩机级别

源文件

压缩后

平均请求时间

压缩比【压缩后数据大小/源数据大小】

gzip

9

352k

51.1k

41ms

14.517%

brotli

5

352

47.3k

31ms

13.437%

brotli

6

352k

45.8k

33ms

13.011%

brotli

9

352k

43.6k

50ms

12.386%

注:gzip 9级别转brotli 6级别,可以节省10.371%左右的带宽。


www页面元素构成流量比例:

类型 流量占比
html 87%
js 9%
css 1%
图片 2.9%
其他 0.1%

其他content-type类型由于在www机页面中的占比不超过0.01%,未对其进行测试。


四、brotli的配置及使用说明

5.1、安装

第一步:

git clone https://github.com/google/ngx_brotli.git

cd ngx_brotli/deps

rm -rf brotli

git clone https://github.com/google/brotli.git

cd ngx_brotli

git submodule update --init

第二步:

nginx 编译安装是加上参数:--add-module=../ngx_brotli/


注:代码地址:https://github.com/google/ngx_brotli#brotli_ratio

https://github.com/google/brotli

5.2、配置

在nginx.conf的gzip配置之前贴上该段配置。

brotli on;

brotli_comp_level 5;

brotli_buffers 16 8k;

brotli_min_length 20;

brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml image/tiff;



相关文章
|
1月前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术在人工智能领域,深度学习技术的迅猛发展带来了巨大的计算资源需求。为了解决这一问题,模型压缩技术应运而生。本文将介绍什么是模型压缩、常见的模型压缩方法以及其在实际应用中的意义。
随着深度学习技术的广泛应用,计算资源的需求也大幅增加。为减少资源消耗,提升模型效率,模型压缩技术成为研究热点。本文探讨了模型压缩的定义、主流方法和其重要性。通过量化、剪枝、知识蒸馏和轻量级架构等策略,模型得以在保持性能的同时减小体积,从而适用于资源受限的环境。这些技术不仅降低了计算成本,还推动了深度学习在移动设备和边缘计算等领域的应用,使AI技术更加普及和实用。总之,模型压缩在平衡模型性能与资源消耗之间发挥着关键作用,是未来AI发展的重要方向。
|
1月前
|
机器学习/深度学习 存储 自然语言处理
深度学习中的模型压缩技术:从理论到实践
本文深入探讨了深度学习领域中的模型压缩技术,包括权重剪枝、量化、知识蒸馏和轻量级模型设计。通过对比实验结果,展示了这些技术在保持模型精度的同时,显著降低计算资源和存储需求。
|
1月前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术:现状与未来
本文旨在探讨深度学习领域中模型压缩技术的现状、挑战及未来发展。随着深度学习技术的飞速发展,大型神经网络在许多任务中取得了显著成果,但它们也面临着计算资源消耗大、部署困难等问题。模型压缩技术应运而生,通过减少模型大小和计算量,使得深度神经网络更加高效、灵活。本文首先介绍了模型压缩的基本概念和方法分类,然后详细讨论了当前主流的模型压缩技术及其优缺点,并展望了未来的研究方向和技术趋势。
|
4月前
|
语音技术 计算机视觉
CVPR 2024 Highlight :北航等发布时间特征维护:无需训练,极致压缩加速Diffusion
【6月更文挑战第28天】在CVPR 2024会议上,北航等研究团队提出了**时间特征维护**技术,针对Diffusion模型实现无需训练的高效压缩与加速。通过选择性保留关键时间特征,他们在保持生成质量的同时,实现了模型4bit极致压缩和超过2.38倍硬件加速,简化了复杂模型,提升了运行效率。这一创新方法有望改善Diffusion模型在实际应用中的资源需求,但其鲁棒性和泛化能力尚需更多验证。[论文链接](https://arxiv.org/pdf/2311.16503)
50 5
|
5月前
|
消息中间件 存储 算法
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
287 0
|
机器学习/深度学习 存储 编解码
深度学习助力数据压缩,一文读懂相关理论
在网络带宽有限的年代,数据压缩显得尤为可贵。还记得美剧硅谷第一季里面大杀四方的数据压缩算法让 pied piper 公司炙手可热。高效的数据压缩使得大型网络应用能够在移动端成为可能,其前景非常诱人。大数据时代的来临,数据的体量和数据的增长速度都达到了一个前所未有的高度。随着 5G 技术的快速发展,边缘计算、物联网、联邦学习等应用需求及应用场景越来越多。在传输网络和存储能力有限的情况下,数据压缩技术发挥了越来越重要的作用。在传统数据压缩算法不断发展的同时,近年来深度学习网络也应用于数据压缩中获得了很好的效果。
856 0
深度学习助力数据压缩,一文读懂相关理论
|
存储 人工智能 缓存
GPT-4 API平替?性能媲美同时成本降低98%,斯坦福提出FrugalGPT,研究却惹争议
GPT-4 API平替?性能媲美同时成本降低98%,斯坦福提出FrugalGPT,研究却惹争议
126 0
|
机器学习/深度学习 存储 人工智能
模型压缩技术综述
模型压缩技术综述
386 0
|
机器学习/深度学习 存储 算法
模型压缩|深度学习(李宏毅)(十三)
模型压缩|深度学习(李宏毅)(十三)
378 0
模型压缩|深度学习(李宏毅)(十三)
|
机器学习/深度学习 Web App开发 编解码
理论 + 标准 + 工程 —— 阿里云视频云编码优化的思考与发现
阿里云智能视频云 资深技术专家王豪此次作为 LiveVideoStackCon 2021 的讲师,与我们分享其对编码优化的思考与发现。
理论 + 标准 + 工程 —— 阿里云视频云编码优化的思考与发现