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

Gzip之后继者Brotli浅析之CDN厂商的智能压缩,服务器Brotli设置
最新回答
忘记心痛回忆

2022-12-17 01:01:36

Gzip的后继者Brotli在CDN智能压缩中表现出色,服务器可通过第三方模块(如Nginx的ngx_brotli)启用Brotli压缩,并配置压缩级别、缓冲等参数优化性能。以下是具体分析:

CDN厂商的智能压缩
  • 同时支持Gzip和Brotli:CDN厂商的“智能压缩”功能通常同时支持Gzip和Brotli两种压缩算法。根据浏览器的支持情况,自动选择不同的压缩方式,以提供最优的压缩效果和兼容性。
  • 浏览器自动选择:浏览器在发起请求时,会在HTTP请求头中通过Accept-Encoding字段声明自己支持的压缩算法,如Accept-Encoding: gzip, deflate, sdch, br。CDN服务器根据这个字段选择最适合的压缩算法进行响应。
Brotli压缩算法的优势
  • 更高的压缩效率:Brotli通过变种的LZ77算法、Huffman编码以及二阶文本建模等方式进行数据压缩,相比Gzip有着更高的压缩效率。使用Brotli替换Deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。
  • 预定义字典:Brotli使用一个预定义的120千字节字典,包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的字典可以提升较小文件的压缩密度。
  • 性能提升

    针对常见的Web资源内容,Brotli的性能相比Gzip提高了17-25%。

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

    在处理不同HTML文档时,Brotli依然能够提供非常高的压缩率。

    比其他算法提供更快的解压与压缩速度。

图一:Brotli与常用的压缩算法bzip2、gzip、lzma2对比,压缩比上有明显的优势。

图二:Brotli的解压缩速度与Gzip非常相似,但远远超出bzip2和lzma2。

服务器Brotli设置
  • 内容编码类型:支持Brotli压缩算法的浏览器使用的内容编码类型为br。HTTP请求头中会包含Accept-Encoding: gzip, deflate, sdch, br,HTTP返回头中会包含Content-Encoding: br。
  • Nginx上启用Brotli

    安装第三方模块:Nginx目前并不原生支持Brotli算法,需要使用第三方模块,如ngx_brotli。安装步骤如下:

git clone
https://github.com/google/ngx_brotlicd
ngx_brotligit submodule update --initcd /path/to/nginx_source/./configure --add-module=/path/to/ngx_brotlimake && make install
  • 配置文件设置:在Nginx配置文件的http块下增加以下指令:
brotli on; brotli_comp_level 6; brotli_buffers 16 8k; brotli_min_length 20; brotli_types *;
  • 指令解析

    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:设置需要进行压缩的最小响应大小。