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;



相关文章
|
14天前
|
机器学习/深度学习 人工智能 算法
【AI系统】模型压缩基本介绍
模型压缩旨在通过减少存储空间、降低计算量和提高计算效率,降低模型部署成本,同时保持模型性能。主要技术包括模型量化、参数剪枝、知识蒸馏和低秩分解,广泛应用于移动设备、物联网、在线服务系统、大模型及自动驾驶等领域。
51 4
【AI系统】模型压缩基本介绍
|
3月前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术在人工智能领域,深度学习技术的迅猛发展带来了巨大的计算资源需求。为了解决这一问题,模型压缩技术应运而生。本文将介绍什么是模型压缩、常见的模型压缩方法以及其在实际应用中的意义。
随着深度学习技术的广泛应用,计算资源的需求也大幅增加。为减少资源消耗,提升模型效率,模型压缩技术成为研究热点。本文探讨了模型压缩的定义、主流方法和其重要性。通过量化、剪枝、知识蒸馏和轻量级架构等策略,模型得以在保持性能的同时减小体积,从而适用于资源受限的环境。这些技术不仅降低了计算成本,还推动了深度学习在移动设备和边缘计算等领域的应用,使AI技术更加普及和实用。总之,模型压缩在平衡模型性能与资源消耗之间发挥着关键作用,是未来AI发展的重要方向。
|
3月前
|
机器学习/深度学习 存储 自然语言处理
深度学习中的模型压缩技术:从理论到实践
本文深入探讨了深度学习领域中的模型压缩技术,包括权重剪枝、量化、知识蒸馏和轻量级模型设计。通过对比实验结果,展示了这些技术在保持模型精度的同时,显著降低计算资源和存储需求。
|
3月前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术:现状与未来
本文旨在探讨深度学习领域中模型压缩技术的现状、挑战及未来发展。随着深度学习技术的飞速发展,大型神经网络在许多任务中取得了显著成果,但它们也面临着计算资源消耗大、部署困难等问题。模型压缩技术应运而生,通过减少模型大小和计算量,使得深度神经网络更加高效、灵活。本文首先介绍了模型压缩的基本概念和方法分类,然后详细讨论了当前主流的模型压缩技术及其优缺点,并展望了未来的研究方向和技术趋势。
|
4月前
|
存储 机器学习/深度学习 测试技术
模型量化技术综述:揭示大型语言模型压缩的前沿技术
在这篇文章中,我将在语言建模的背景下介绍量化,并逐一探讨各个概念,探索各种方法论、用例以及量化背后的原理。
68 0
模型量化技术综述:揭示大型语言模型压缩的前沿技术
|
5月前
|
缓存 前端开发 JavaScript
优化的艺术:提升网站性能的十大关键技术策略
【7月更文第9天】在当今快速发展的互联网时代,网站性能直接影响用户体验和业务转化率。一个高性能的网站不仅能够吸引并留住用户,还能在搜索引擎排名中占据有利位置。本文将深入探讨提升网站性能的十大关键技术策略,并提供实用的代码示例帮助开发者实施这些优化措施。
362 3
|
7月前
|
存储 人工智能 异构计算
清华&哈工大提出极限压缩方案:1bit量化,能力同时保留83%
【2月更文挑战第22天】清华&哈工大提出极限压缩方案:1bit量化,能力同时保留83%
128 1
清华&哈工大提出极限压缩方案:1bit量化,能力同时保留83%
|
7月前
|
消息中间件 存储 算法
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
371 0
|
机器学习/深度学习 存储 编解码
深度学习助力数据压缩,一文读懂相关理论
在网络带宽有限的年代,数据压缩显得尤为可贵。还记得美剧硅谷第一季里面大杀四方的数据压缩算法让 pied piper 公司炙手可热。高效的数据压缩使得大型网络应用能够在移动端成为可能,其前景非常诱人。大数据时代的来临,数据的体量和数据的增长速度都达到了一个前所未有的高度。随着 5G 技术的快速发展,边缘计算、物联网、联邦学习等应用需求及应用场景越来越多。在传输网络和存储能力有限的情况下,数据压缩技术发挥了越来越重要的作用。在传统数据压缩算法不断发展的同时,近年来深度学习网络也应用于数据压缩中获得了很好的效果。
878 0
深度学习助力数据压缩,一文读懂相关理论
|
机器学习/深度学习 存储 人工智能
模型压缩技术综述
模型压缩技术综述
411 0