明月登楼

给Nginx添加谷歌Brotli压缩算法支持
Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 ...
扫描右侧二维码阅读全文
16
2018/06

给Nginx添加谷歌Brotli压缩算法支持

Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli。Brotli 通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,与其他压缩算法相比,它有着更高的压缩效率。

1_WTjpcuQ3Myq-ot9_-8SXng.png

根据 Google 发布的研究报告,Brotli 压缩算法具有多个特点,最典型的是以下 3 个:

  • 针对常见的 Web 资源内容,Brotli 的性能相比 Gzip 提高了 17-25%;
  • 当 Brotli 压缩级别为 1 时,压缩率比 Gzip 压缩等级为 9(最高)时还要高;
  • 在处理不同 HTML 文档时,Brotli 依然能够提供非常高的压缩率。

Brotli 凭借它优异的压缩性能迅速占领了市场,从下图可以看到,除了 IE 和 Opera Mini 之外,几乎所有的主流浏览器都已支持 Brotli 算法。

pasted image 0.png

安装模块

首先获取 ngx_brotli 的源码包到lnmp的src目录里

get source

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

cd ngx_brotli

git submodule update --init

cd ..

Nginx编译添加 ngx_brotli 模块

编辑lnmp1.5目录的Lnmp.conf文件在Nginx_Modules_Options里面添加:

--add-module=../ngx_brotli

这样一段后即可,重新编译Nginx。

ngx_brotli 模块的配置

安装完成 ngx_brotli 模块后,你就可以在配置文件里启用它了:

# 配置段: http, server, location

# 开启 ngx_brotli 压缩

brotli on;

# 指定压缩数据的最小长度,只有大于或等于最小长度才会对其压缩。这里指定 20 字节

brotli_min_length 20;

# Brotli 请求缓冲区的数量和大小

brotli_buffers 16 10k;

# Brotli 使用的窗口值。默认值为 512k

brotli_window 512k;

# 压缩水平可以是 0 到 11,默认值是 6。太高的压缩水平对性能提升并没有太大好处,因为这需要更多的 CPU 时间

brotli_comp_level 6;

# 指定允许进行压缩的回复类型

brotli_types text/html text/xml text/plain application/json text/css image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl application/javascript image/x-icon image/jpeg image/gif image/png;

# 是否允许查找预处理好的、以 .br 结尾的压缩文件。可选值为 on、off、always

brotli_static always;

经过实地验证,brotli和gzip可以共存。这是一个好消息,意味着Jackie可以在项目中使用启用brotli算法支持的nginx。 对于支持brotli算法的浏览器,比如Chrome 49之后的版本,使用开发者工具检查网络通信时,可以看到如下的HTTP响应头:

Content-Encoding: br

Brotli是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。

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

使用Brotli替换Deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。

又拍云 CDN 已经支持Brotli压缩算法了!

最后修改:2018 年 06 月 16 日 10 : 38 AM
如果觉得我的文章对你有用,请随意赞赏

4 条评论

  1. 欧文斯

    如果不支持 IE,那是不是意味着,开启之后 IE 访问不了

    1. 明月登楼
      @欧文斯

      呵呵,当然不是了!不支持意味着IE下无法使用这个压缩算法!Nginx支持GZip和Grotli压缩算法自动根据客户端浏览器适配的!所以不支持Grotli压缩算法就用GZip算法了!反之亦然!OωO

  2. 薅羊毛

    很好很强悍,但是我还是不会

    1. 明月登楼
      @薅羊毛

      呵呵,其实这个很简单的!就是加了个模块而已!

发表评论