截止到2024-1-11,使用的主要軟體的版本如下: 軟體實體 版本 react-native 0.73.1 react 18.2.0 react-native-cli 2.0.1 Android Studio 2022.3.1 Patch3 Android SDK Android SDK Plat ...
本文於2017年2月中旬完成,發佈在個人博客網站上。
考慮個人博客因某種原因無法修複,於是在博客園安家,之前發佈的文章逐步搬遷過來。
Brotli是一種全新的數據格式,可以提供比Zopfli高20-26%的壓縮比。
在caniuse網站查詢當前主流瀏覽器對brotli演算法的支持程度,結果頁面Brotli Accept-Encoding/Content-Encoding。很不幸,IE11並不支持該演算法,與之相反,Chrome從49開始支持brotli演算法。
安裝
下載源碼
從ngx_brotli下載ngx_brotli
的代碼。ngx_brotli
編譯時依賴brotli,但註意不能直接從brotli下載代碼,否則編譯時可能會出錯。如果是手工下載代碼,建議從ngx_brotli
代碼路徑deps目錄下,點擊brotli的代碼標簽,然後取該標簽的代碼。
編譯
./configure --prefix=/home/jackie/software/nginx \
--with-openssl=/home/jackie/Downloads/nginx/openssl-1.0.2k \
--with-pcre=/home/jackie/Downloads/nginx/pcre-8.38 \
--with-zlib=/home/jackie/Downloads/nginx/zlib-1.2.8 \
--with-http_ssl_module \
--with-http_v2_module \
--with-threads \
--with-debug \
--add-module=/home/jackie/Downloads/nginx/ngx_brotli-master
make install
配置說明
指令介紹
ngx_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;
完整樣例
http {
...
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_buffers 128 32k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;
brotli on;
brotli_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript;
brotli_static off;
brotli_comp_level 11;
brotli_buffers 16 8k;
brotli_window 512k;
brotli_min_length 20;
...
}
經過實地驗證,brotli和gzip可以共存。這是一個好消息,意味著Jackie可以在項目中使用啟用brotli演算法支持的nginx。
對於支持brotli演算法的瀏覽器,比如Chrome 49之後的版本,使用開發者工具檢查網路通信時,可以看到如下的HTTP響應頭。
Content-Encoding: br
參考資料
- RFC 7932
- RFC 7932
- Introducing Brotli: a new compression algorithm for the internet
- Brotli
- Results of experimenting with Brotli for dynamic web content
- Web Pages Will Soon Load Even Faster in Google Chrome
- VARNISH CACHE AND BROTLI COMPRESSION
- Boiling Fast Internet with Brotli
- Lossless compression with Brotli in Rust for a bit of Pied Piper on the backend
- Brotli: A new compression algorithm for faster Internet
- Next Generation Server Compression With Brotli
- Static site implosion with Brotli and Gzip
- The current state of Brotli compression
性能測試
- Compression Benchmarks: brotli, gzip, xz, bz2
- Brotli、Deflate、Zopfli、LZMA、LZHAM、Bzip2六種無損數據壓縮性能比較
- Comparison of Brotli, Deflate, Zopfli, LZMA, LZHAM and Bzip2 Compression Algorithms
- Brotli與zip壓縮率對比
本文來自博客園,作者:jackieathome,轉載請註明原文鏈接: