「智能壓縮」按照又拍雲的說法是,同時支持 Gzip 和 Brotli 壓縮算法。根據用於瀏覽器開啓自動選擇不一樣壓縮方式。html
Gzip 基於 DEFLATE 算法,它是 LZ77 和霍夫曼編碼的組合,最先用於 UNIX 系統的文件壓縮。HTTP 協議上的 Gzip 編碼是一種用來進 Web 應用程序性能的技術,Web 服務器和客戶端(瀏覽器)必須共同支持 Gzip,當下主流的瀏覽器都是支持 Gzip 壓縮,包括 IE六、IE七、IE八、IE九、FireFox、Google Chrome、Opera 等。nginx
Google 認爲互聯網用戶的時間是寶貴,尤爲不該該浪費在無用的網頁加載中。git
2013年,他們發佈了 Zotfli 壓縮算法。該算法在默認設置下的輸出比 zlib 的最大壓縮比輸出還要小 3-8%。PNG 優化器、Web 內容預處理等許多壓縮方案中都集成了該算法。基於該算法的應用狀況,於 2015 年 9 月推出了無損壓縮算法 Brotli,最初用於用於網絡字體的離線壓縮。該算法由谷歌壓縮團隊的 Jyrki Alakuijala 和 Zoltan Szabadka 開發,其中 Jyrki 亦是 Zotfli 壓縮算法的建立者。github
2015年9月發佈了包含通用無損數據壓縮的Brotli加強版本,特別側重於HTTP壓縮。其中的編碼器被部分改寫以提升壓縮比,編碼器和解碼器都提升了速度,流式API已被改進,增長更多壓縮質量級別。新版本還展示了跨平臺的性能改進,以及減小解碼所需的內存。web
Brotli 經過變種的 LZ77 算法、Huffman 編碼以及二階文本建模等方式進行數據壓縮,與其餘壓縮算法相比,它有着更高的壓縮效率。算法
與常見的通用壓縮算法不一樣,Brotli使用一個預約義的120千字節字典。該字典包含超過13000個經常使用單詞、短語和其餘子字符串,這些來自一個文本和HTML文檔的大型語料庫。預約義的算法能夠提高較小文件的壓縮密度。segmentfault
使用brotli替換deflate來對文本文件壓縮一般能夠增長20%的壓縮密度,而壓縮與解壓縮速度則大體不變。瀏覽器
Brotli 壓縮算法具備多個特色,最典型的是如下 3 個:bash
針對常見的 Web 資源內容,Brotli 的性能相比 Gzip 提升了 17-25%;服務器
當 Brotli 壓縮級別爲 1 時,壓縮率比 Gzip 壓縮等級爲 9(最高)時還要高;
在處理不一樣 HTML 文檔時,Brotli 依然可以提供很是高的壓縮率。
比其餘算法提供更快的解壓與壓縮算法
Brotli算法與其餘算法壓縮比率對比
圖一,咱們能夠看到 Brotli 與經常使用的壓縮算法 bzip二、gzip、lzma2 對比,壓縮比上有明顯的優點。
圖二,咱們看到 Brotli 的解壓縮速度與 Gzip 很是類似,可是遠遠超出 bzip2 和 lzma2,儘管它們相較於 Gzip 有更好的壓縮比,可是它們解壓縮的速度要慢幾倍,和 Brotli 一比,他們的優點消失殆盡。
Brotli 算法和其餘算法的性能比較:
https://cran.r-project.org/web/packages/brotli/vignettes/benchmarks.html
https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli
支持Brotli壓縮算法的瀏覽器使用的內容編碼類型爲br
http請求頭:Accept-Encoding: gzip, deflate, sdch, br
http返回頭:Content-Encoding: br
nginx目前並不支持Brotli算法,須要使用第三方模塊,例如ngx_brotli進行實現。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
brotli on; brotli_comp_level 6; brotli_buffers 16 8k; brotli_min_length 20; brotli_types *;
brotli_static:啓用後將會檢查是否存在帶有br擴展的預先壓縮過的文件。若是值爲always,則老是使用壓縮過的文件,而不判斷瀏覽器是否支持。
brotli:是否啓用在on-the-fly方式壓縮文件,啓用後,將會在響應時對文件進行壓縮並返回。
brotli_types:指定對哪些內容編碼類型進行壓縮。text/html內容老是會被進行壓縮。
brotli_buffers:設置緩衝的數量和大小。大小默認爲一個內存頁的大小,也就是4k或者8k。
brotli_comp_level:設置壓縮質量等級。取值範圍是0到11.
brotli_window:設置窗口大小。
brotli_min_length:設置須要進行壓縮的最小響應大小。
如今貼吧化的知乎,就使用了brotli
相關文章:
轉載本站文章《Gzip以後繼者Brotli淺析之CDN廠商的智能壓縮,服務器Brotli設置》,
請註明出處:https://www.zhoulujun.cn/html/webfront/SGML/web/2020_0125_8255.html