Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli。Brotli 通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,与其他压缩算法相比,它有着更高的压缩效率。
根据 Google 发布的研究报告,Brotli 压缩算法具有多个特点,最典型的是以下 3 个:
- 针对常见的 Web 资源内容,Brotli 的性能相比 Gzip 提高了 17-25%;
- 当 Brotli 压缩级别为 1 时,压缩率比 Gzip 压缩等级为 9(最高)时还要高;
- 在处理不同 HTML 文档时,Brotli 依然能够提供非常高的压缩率。
Brotli 凭借它优异的压缩性能迅速占领了市场,从下图可以看到,除了 IE 和 Opera Mini 之外,几乎所有的主流浏览器都已支持 Brotli 算法。
安装模块
首先获取 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 application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
# 是否允许查找预处理好的、以 .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压缩算法了!
4 条评论
如果不支持 IE,那是不是意味着,开启之后 IE 访问不了
呵呵,当然不是了!不支持意味着IE下无法使用这个压缩算法!Nginx支持GZip和Grotli压缩算法自动根据客户端浏览器适配的!所以不支持Grotli压缩算法就用GZip算法了!反之亦然!OωO
很好很强悍,但是我还是不会
呵呵,其实这个很简单的!就是加了个模块而已!