在web应用中,为了节省流量,下降传输数据大小,提升传输效率,经常使用的压缩方式通常都是gzip,今天咱们来介绍另一种更高效的压缩方式brotli。
Brotli 是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli加强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提升压缩比,编码器和解码器都提升了速度,流式API已被改进,增长更多压缩质量级别。
与常见的通用压缩算法不一样,Brotli使用一个预约义的120千字节字典。该字典包含超过13000个经常使用单词、短语和其余子字符串,这些来自一个文本和HTML文档的大型语料库。预约义的算法能够提高较小文件的压缩密度。
使用Brotli替换Deflate(gzip)来对文本文件压缩一般能够增长20%的压缩密度,而压缩与解压缩速度则大体不变。javascript
浏览器支持状况css
以centos为例,配置Nginx使其支持brotli压缩java
一、安装依赖nginx
> yum groupinstall 'Development Tools'
二、安装libbrotligit
cd /usr/local/src/ git clone https://github.com/bagder/libbrotli cd libbrotli ./autogen.sh ./configure make && make install
三、安装ngx_brotligithub
> cd /usr/local/src/ > git clone https://github.com/google/ngx_brotli > cd ngx_brotli && git submodule update --init
四、下载Nginxweb
> cd /usr/local/src > wget http://nginx.org/download/nginx-1.10.3.tar.gz > tar -xvzf nginx-1.10.3.tar.gz
五、编译安装算法
> cd /usr/local/src/nginx-1.10.3 > ./configure --add-module=/usr/local/src/ngx_brotli > make # 若是是首次安装Nginx,执行make install;若是是升级,执行make upgrade > make install
六、查看是否安装正常chrome
> nginx -V > nginx -t
七、配置brotli
在nginx.conf文件的http模块下新增如下内容json
#Brotli Compression brotli on; brotli_comp_level 6; 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;
八、检查是否生效
打开网页,用chrome开发者工具调试,在Network一栏会发现有content-encoding:br,同时网络耗时也会明显减小。