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;



相关文章
|
2月前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术在人工智能领域,深度学习技术的迅猛发展带来了巨大的计算资源需求。为了解决这一问题,模型压缩技术应运而生。本文将介绍什么是模型压缩、常见的模型压缩方法以及其在实际应用中的意义。
随着深度学习技术的广泛应用,计算资源的需求也大幅增加。为减少资源消耗,提升模型效率,模型压缩技术成为研究热点。本文探讨了模型压缩的定义、主流方法和其重要性。通过量化、剪枝、知识蒸馏和轻量级架构等策略,模型得以在保持性能的同时减小体积,从而适用于资源受限的环境。这些技术不仅降低了计算成本,还推动了深度学习在移动设备和边缘计算等领域的应用,使AI技术更加普及和实用。总之,模型压缩在平衡模型性能与资源消耗之间发挥着关键作用,是未来AI发展的重要方向。
|
2月前
|
机器学习/深度学习 存储 自然语言处理
深度学习中的模型压缩技术:从理论到实践
本文深入探讨了深度学习领域中的模型压缩技术,包括权重剪枝、量化、知识蒸馏和轻量级模型设计。通过对比实验结果,展示了这些技术在保持模型精度的同时,显著降低计算资源和存储需求。
|
3月前
|
数据采集 自然语言处理 测试技术
CMU&清华新作:让LLM自己合成数据来学习,特定任务性能同样大幅提升
【8月更文挑战第24天】近期研究提出SELF-GUIDE,一种创新方法,旨在通过大型语言模型(LLMs)自动生成特定任务数据并用于自我微调,以克服其在特定任务上的性能局限。SELF-GUIDE分为三个阶段:数据合成、模型微调及性能评估。通过向目标LLM提供适当提示生成高质量合成数据,并用于微调以提升特定任务表现。实验证明,该方法在Natural Instructions V2等多个基准测试中显著提升了分类与生成任务性能。SELF-GUIDE不仅有效提高性能,还具备高数据效率,减少对外部数据依赖。然而,生成数据质量受限于LLM能力,且并非适用于所有任务。
63 4
|
2月前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术:现状与未来
本文旨在探讨深度学习领域中模型压缩技术的现状、挑战及未来发展。随着深度学习技术的飞速发展,大型神经网络在许多任务中取得了显著成果,但它们也面临着计算资源消耗大、部署困难等问题。模型压缩技术应运而生,通过减少模型大小和计算量,使得深度神经网络更加高效、灵活。本文首先介绍了模型压缩的基本概念和方法分类,然后详细讨论了当前主流的模型压缩技术及其优缺点,并展望了未来的研究方向和技术趋势。
|
6月前
|
存储 人工智能 异构计算
清华&哈工大提出极限压缩方案:1bit量化,能力同时保留83%
【2月更文挑战第22天】清华&哈工大提出极限压缩方案:1bit量化,能力同时保留83%
113 1
清华&哈工大提出极限压缩方案:1bit量化,能力同时保留83%
|
6月前
|
消息中间件 存储 算法
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
310 0
|
6月前
|
tengine 人工智能 算法
极智AI | 谈谈Tengine TensorRT后端组织流程
大家好,我是极智视界,本文主要谈谈 Tengine TensorRT 后端组织流程。
93 0
|
机器学习/深度学习 存储 人工智能
模型压缩技术综述
模型压缩技术综述
391 0
|
机器学习/深度学习 存储 算法
模型压缩|深度学习(李宏毅)(十三)
模型压缩|深度学习(李宏毅)(十三)
382 0
模型压缩|深度学习(李宏毅)(十三)
|
编解码 前端开发 JavaScript
前端Base64编码知识,一文打尽,探索起源,追求真相。
Base64编码,你一定知道的,先来看看她在前端的一些常见应用: 当然绝部分场景都是基于Data URLs
453 0
前端Base64编码知识,一文打尽,探索起源,追求真相。