什么是 brotli 壓縮算法
brotli最初發布于2015年,用于網絡字體的離線壓縮。google軟件工程師在2015年9月發布了包含通用無損數據壓縮的brotli增強版本,特別側重于http壓縮。其中的編碼器被部分改寫以提高壓縮比,編碼器和解碼器都提高了速度,流式api已被改進,增加更多壓縮質量級別。新版本還展現了跨平臺的性能改進,以及減少解碼所需的內存。
與常見的通用壓縮算法不同,brotli使用一個預定義的120千字節字典。該字典包含超過13000個常用單詞、短語和其他子字符串,這些來自一個文本和html文檔的大型語料庫。預定義的算法可以提升較小文件的壓縮密度。
使用brotli替換deflate來對文本文件壓縮通常可以增加20%的壓縮密度,而壓縮與解壓縮速度則大致不變。使用brotli進行流壓縮的內容編碼類型已被提議使用“br”。
安裝
1.下載 brotli
git?clone?https://github.com/google/ngx_brotli cd?ngx_brotli?&&?git?submodule?update?--init
2.編譯
在原有的編譯配置后增加 –add-module=/opt/nginx/ngx_brotli
例如
復制代碼?代碼如下:
./configure –prefix=/usr/local/nginx –user=www –group=www –with-pcre=/opt/nginx/pcre-8.41 –with-http_ssl_module –with-zlib=/opt/nginx/zlib-1.2.11 –with-openssl=/opt/nginx/openssl-1.0.2n –add-module=/opt/nginx/ngx_brotli –with-http_v2_module
配置,在 http 段加入
http?{ ??include????mime.types; ??default_type?application/octet-stream; ??sendfile????on; ??tcp_nopush???on; ??keepalive_timeout?65; ??#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; ??……
重啟,刷新頁面查看 header,發現有
accept-encoding:gzip,?deflate,?br
如圖所示
即表示開啟了 brotli 壓縮
配置說明
指令介紹
定義了如下指令:
brotli,是否允許動態壓縮響應數據,可選值為on和off,默認值為off。樣例如下:
brotli?on;
brotli_types,動態壓縮啟用時,允許壓縮的mime types,默認值為text/html。樣例如下:
brotli_types?text/plain?text/css?text/xml?application/xml?application/json?text/javascript?application/javascript?application/x-javascript;
brotli_static,是否允許查找預處理好的、以.br結尾的壓縮文件,可選值為on、off和always,默認值為off。樣例如下:
brotli_static?off;
brotli_comp_level,壓縮級別,可選值范圍為0~11,默認值為6。樣例如下:
brotli_comp_level?11;
brotli_buffers,壓縮響應數據時使用的緩沖區的數量和大小。樣例如下:
brotli_buffers?16?8k;
brotli_window,brotli使用的窗口值,默認值為512k。樣例如下:
brotli_window?512k;
brotli_min_length,響應數據的最小長度,低于該值將不使用brotli算法執行壓縮操作。brotli算法使用content-length來確定響應數據的長度。樣例如下:
brotli_min_length?20;