Gzip以后继者Brotli浅析之CDN厂商的智能压缩,服务器Brotli设置

智能压缩”按照又拍云的说法是,同时支持 Gzip 和 Brotli 压缩算法。根据用于浏览器开启自动选择不一样压缩方式。html

Gzip 压缩算法

Gzip 基于 DEFLATE 算法,它是 LZ77 和霍夫曼编码的组合,最先用于 UNIX 系统的文件压缩。HTTP 协议上的 Gzip 编码是一种用来进 Web 应用程序性能的技术,Web 服务器和客户端(浏览器)必须共同支持 Gzip,当下主流的浏览器都是支持 Gzip 压缩,包括 IE六、IE七、IE八、IE九、FireFox、Google Chrome、Opera 等。nginx

Brotli 压缩算法

Google 认为互联网用户的时间是宝贵,尤为不该该浪费在无用的网页加载中。git

2013年,他们发布了 Zotfli 压缩算法。该算法在默认设置下的输出比 zlib 的最大压缩比输出还要小 3-8%。PNG 优化器、Web 内容预处理等许多压缩方案中都集成了该算法。基于该算法的应用状况,于 2015 年 9 月推出了无损压缩算法 Brotli,最初用于用于网络字体的离线压缩。该算法由谷歌压缩团队的 Jyrki Alakuijala 和 Zoltan Szabadka 开发,其中 Jyrki 亦是 Zotfli 压缩算法的建立者。github

2015年9月发布了包含通用无损数据压缩的Brotli加强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提升压缩比,编码器和解码器都提升了速度,流式API已被改进,增长更多压缩质量级别。新版本还展示了跨平台的性能改进,以及减小解码所需的内存。web

Brotli 经过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,与其余压缩算法相比,它有着更高的压缩效率算法

与常见的通用压缩算法不一样,Brotli使用一个预约义的120千字节字典。该字典包含超过13000个经常使用单词、短语和其余子字符串,这些来自一个文本和HTML文档的大型语料库。预约义的算法能够提高较小文件的压缩密度。segmentfault

使用brotli替换deflate来对文本文件压缩一般能够增长20%的压缩密度,而压缩与解压缩速度则大体不变。浏览器

Brotli 压缩算法具备多个特色,最典型的是如下 3 个:bash

  • 针对常见的 Web 资源内容,Brotli 的性能相比 Gzip 提升了 17-25%;服务器

  • 当 Brotli 压缩级别为 1 时,压缩率比 Gzip 压缩等级为 9(最高)时还要高;

  • 在处理不一样 HTML 文档时,Brotli 依然可以提供很是高的压缩率。

  • 比其余算法提供更快的解压与压缩算法

Brotli算法与其余算法压缩比率对比

Brotli算法与其余算法压缩比率对比Brotli解压与压缩与其余算法速度对比

图一,咱们能够看到 Brotli 与经常使用的压缩算法 bzip二、gzip、lzma2 对比,压缩比上有明显的优点。

图二,咱们看到 Brotli 的解压缩速度与 Gzip 很是类似,可是远远超出 bzip2 和 lzma2,尽管它们相较于 Gzip 有更好的压缩比,可是它们解压缩的速度要慢几倍,和 Brotli 一比,他们的优点消失殆尽。

Brotli 算法和其余算法的性能比较:

  • https://cran.r-project.org/web/packages/brotli/vignettes/benchmarks.html

  • https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli

服务器支持Brotli压缩算法

支持Brotli压缩算法的浏览器使用的内容编码类型为br

http请求头:Accept-Encoding: gzip, deflate, sdch, br

http返回头:Content-Encoding: br

在Nginx上启用Brotli

nginx目前并不支持Brotli算法,须要使用第三方模块,例如ngx_brotli进行实现。https://github.com/google/ngx_brotli

下面是简单的安装步骤。

git clone https://github.com/google/ngx_brotli
cd ngx_brotli
git submodule update --init
cd /path/to/nginx_source/
./configure --add-module=/path/to/ngx_brotli
make && make install

Nginx配置文件的http块下增长如下指令:

brotli               on;  
brotli_comp_level    6;  
brotli_buffers       16 8k;  
brotli_min_length    20;  
brotli_types         *;

nginx brotli模块指令解析

  • brotli_static:启用后将会检查是否存在带有br扩展的预先压缩过的文件。若是值为always,则老是使用压缩过的文件,而不判断浏览器是否支持。

  • brotli:是否启用在on-the-fly方式压缩文件,启用后,将会在响应时对文件进行压缩并返回。

  • brotli_types:指定对哪些内容编码类型进行压缩。text/html内容老是会被进行压缩。

  • brotli_buffers:设置缓冲的数量和大小。大小默认为一个内存页的大小,也就是4k或者8k。

  • brotli_comp_level:设置压缩质量等级。取值范围是0到11.

  • brotli_window:设置窗口大小。

  • brotli_min_length:设置须要进行压缩的最小响应大小。

如今贴吧化的知乎,就使用了brotli

 

相关文章:

 

转载本站文章《Gzip以后继者Brotli浅析之CDN厂商的智能压缩,服务器Brotli设置》,
请注明出处:https://www.zhoulujun.cn/html/webfront/SGML/web/2020_0125_8255.html

相关文章
相关标签/搜索