“智能壓縮”按照又拍云的說法是,同時支持 Gzip 和 Brotli 壓縮算法惨寿。根據(jù)用于瀏覽器開啟自動選擇不同壓縮方式。
Gzip 壓縮算法
Gzip 基于 DEFLATE 算法删窒,它是 LZ77 和霍夫曼編碼的組合裂垦,最早用于 UNIX 系統(tǒng)的文件壓縮。HTTP 協(xié)議上的 Gzip 編碼是一種用來進(jìn) Web 應(yīng)用程序性能的技術(shù)肌索,Web 服務(wù)器和客戶端(瀏覽器)必須共同支持 Gzip蕉拢,當(dāng)下主流的瀏覽器都是支持 Gzip 壓縮,包括 IE6诚亚、IE7晕换、IE8、IE9站宗、FireFox闸准、Google Chrome、Opera 等梢灭。
Brotli 壓縮算法
Google 認(rèn)為互聯(lián)網(wǎng)用戶的時間是寶貴夷家,尤其不應(yīng)該浪費(fèi)在無用的網(wǎng)頁加載中。
2013年或辖,他們發(fā)布了 Zotfli 壓縮算法瘾英。該算法在默認(rèn)設(shè)置下的輸出比 zlib 的最大壓縮比輸出還要小 3-8%。PNG 優(yōu)化器颂暇、Web 內(nèi)容預(yù)處理等許多壓縮方案中都集成了該算法缺谴。基于該算法的應(yīng)用情況耳鸯,于 2015 年 9 月推出了無損壓縮算法 Brotli湿蛔,最初用于用于網(wǎng)絡(luò)字體的離線壓縮。該算法由谷歌壓縮團(tuán)隊的 Jyrki Alakuijala 和 Zoltan Szabadka 開發(fā)县爬,其中 Jyrki 亦是 Zotfli 壓縮算法的創(chuàng)建者阳啥。
2015年9月發(fā)布了包含通用無損數(shù)據(jù)壓縮的Brotli增強(qiáng)版本,特別側(cè)重于HTTP壓縮财喳。其中的編碼器被部分改寫以提高壓縮比察迟,編碼器和解碼器都提高了速度,流式API已被改進(jìn)耳高,增加更多壓縮質(zhì)量級別扎瓶。新版本還展現(xiàn)了跨平臺的性能改進(jìn),以及減少解碼所需的內(nèi)存泌枪。
Brotli 通過變種的 LZ77 算法概荷、Huffman 編碼以及二階文本建模等方式進(jìn)行數(shù)據(jù)壓縮,與其他壓縮算法相比碌燕,它有著更高的壓縮效率误证。
與常見的通用壓縮算法不同继薛,Brotli使用一個預(yù)定義的120千字節(jié)字典。該字典包含超過13000個常用單詞愈捅、短語和其他子字符串遏考,這些來自一個文本和HTML文檔的大型語料庫。預(yù)定義的算法可以提升較小文件的壓縮密度蓝谨。
使用brotli替換deflate來對文本文件壓縮通痴┟螅可以增加20%的壓縮密度,而壓縮與解壓縮速度則大致不變像棘。
Brotli 壓縮算法具有多個特點,最典型的是以下 3 個:
針對常見的 Web 資源內(nèi)容壶冒,Brotli 的性能相比 Gzip 提高了 17-25%缕题;
當(dāng) Brotli 壓縮級別為 1 時,壓縮率比 Gzip 壓縮等級為 9(最高)時還要高胖腾;
在處理不同 HTML 文檔時烟零,Brotli 依然能夠提供非常高的壓縮率。
比其他算法提供更快的解壓與壓縮算法
Brotli算法與其他算法壓縮比率對比
圖一咸作,我們可以看到 Brotli 與常用的壓縮算法 bzip2锨阿、gzip、lzma2 對比记罚,壓縮比上有明顯的優(yōu)勢墅诡。
圖二,我們看到 Brotli 的解壓縮速度與 Gzip 非常相似桐智,但是遠(yuǎn)遠(yuǎn)超出 bzip2 和 lzma2末早,盡管它們相較于 Gzip 有更好的壓縮比,但是它們解壓縮的速度要慢幾倍说庭,和 Brotli 一比然磷,他們的優(yōu)勢消失殆盡。
Brotli 算法和其他算法的性能比較:
https://cran.r-project.org/web/packages/brotli/vignettes/benchmarks.html
https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli
服務(wù)器支持Brotli壓縮算法
支持Brotli壓縮算法的瀏覽器使用的內(nèi)容編碼類型為br
http請求頭:Accept-Encoding: gzip, deflate, sdch, br
http返回頭:Content-Encoding: br
在Nginx上啟用Brotli
nginx目前并不支持Brotli算法刊驴,需要使用第三方模塊姿搜,例如ngx_brotli進(jìn)行實現(xiàn)。https://github.com/google/ngx_brotli
下面是簡單的安裝步驟捆憎。
git?clone?https://github.com/google/ngx_brotli
cd?ngx_brotli
git?submodule?update?--init
cd?/path/to/nginx_source/
./configure?--add-module=/path/to/ngx_brotli
make?&&?make?install
Nginx配置文件的http塊下增加以下指令:
brotli???????????????on;??
brotli_comp_level????6;??
brotli_buffers???????16?8k;??
brotli_min_length????20;??
brotli_types?????????*;
nginx?brotli模塊指令解析
brotli_static:啟用后將會檢查是否存在帶有br擴(kuò)展的預(yù)先壓縮過的文件舅柜。如果值為always,則總是使用壓縮過的文件攻礼,而不判斷瀏覽器是否支持业踢。
brotli:是否啟用在on-the-fly方式壓縮文件,啟用后礁扮,將會在響應(yīng)時對文件進(jìn)行壓縮并返回知举。
brotli_types:指定對哪些內(nèi)容編碼類型進(jìn)行壓縮瞬沦。text/html內(nèi)容總是會被進(jìn)行壓縮。
brotli_buffers:設(shè)置緩沖的數(shù)量和大小雇锡。大小默認(rèn)為一個內(nèi)存頁的大小逛钻,也就是4k或者8k。
brotli_comp_level:設(shè)置壓縮質(zhì)量等級锰提。取值范圍是0到11.
brotli_window:設(shè)置窗口大小曙痘。
brotli_min_length:設(shè)置需要進(jìn)行壓縮的最小響應(yīng)大小。
現(xiàn)在貼吧化的知乎立肘,就使用了brotli
相關(guān)文章:
Google 開源 Brotli 壓縮算法https://www.infoq.cn/article/2015/10/Google-Brotli-Zotfli/
智能壓縮边坤,擺脫用 Gzip 還是 Brotli 的糾結(jié)http://www.reibang.com/p/94a153630de4
讓 CDN 更省流量的 Brotli 算法詳解http://www.reibang.com/p/45c95bdf4f0c
使用Brotli提高網(wǎng)站訪問速度https://segmentfault.com/a/1190000009374437
在ASP.NET Core中使用brotli壓縮https://www.cnblogs.com/shanyou/p/9154816.html
轉(zhuǎn)載本站文章《Gzip之后繼者Brotli淺析之CDN廠商的智能壓縮,服務(wù)器Brotli設(shè)置》,
請注明出處:https://www.zhoulujun.cn/html/webfront/SGML/web/2020_0125_8255.html