Gzip是什么
復制大神們的解釋吧:
GZIP
最早由Jean-loup Gailly
和Mark Adler
創(chuàng)建隘马,用于UNIX
系統(tǒng)的文件壓縮免钻。我們在Linux中經(jīng)常會用到后綴為.gz
的文件,它們就是GZIP
格式的。現(xiàn)今已經(jīng)成為Internet
上使用非常普遍的一種數(shù)據(jù)壓縮格式蛾绎,或者說一種文件格式。HTTP
協(xié)議上的GZIP
編碼是一種用來改進WEB應用程序
性能的技術(shù)迫淹。大流量的WEB
站點常常使用GZIP
壓縮技術(shù)來讓用戶感受更快的速度秘通。這一般是指WWW
服務(wù)器中安裝的一個功能,當有人來訪問這個服務(wù)器中的網(wǎng)站時,服務(wù)器中的這個功能就將網(wǎng)頁內(nèi)容壓縮后傳輸?shù)絹碓L的電腦瀏覽器中顯示出來.一般對純文本內(nèi)容可壓縮到原大小的40%
.這樣傳輸就快了,效果就是你點擊網(wǎng)址后會很快的顯示出來.當然這也會增加服務(wù)器的負載. 一般服務(wù)器中都安裝有這個功能模塊的.
Gzip壓縮率
舉個例子,通過webpack
打包后的js文件比較大敛熬,雖然我們可以利用chunk
功能將文件分開混淆打包,但是總體積還是不械诠伞应民;這時候看看利用gzip壓縮的效果:
啟用Gzip前
啟用Gzip后
對比其中三個文件前后壓縮大小:
文本類文件:
- iview.min.js:
429kb
->109kb
夕吻,壓縮比74.6%
- base.min.js:
309kb
->81.7kb
诲锹,壓縮比73.56%
- style.min.css:
207kb
->30.9kb
,壓縮比85%
圖片:
- 圖片1:
63.2kb
->63.2kb
涉馅,壓縮比0%
归园?
我們看到文本類文件的壓縮效果非常顯著,但是圖片體積沒變稚矿∮褂眨看一下文本類的http響應頭
是有g(shù)zip壓縮過:
image.png
而圖片的沒有:
image.png
這是因為一般對于圖片(png,jpg等)使用
gzip
的效果不好甚至恰得其反,所以一般都默認對圖片不進行gzip
壓縮晤揣。
node.js啟用gzip
下面說一下node的express
框架如何使用gzip:
1.安裝一個compression
依賴:
npm install compression
2.調(diào)用:
var compression = require('compression')
var app = express();
//盡量在其他中間件前使用compression
app.use(compression());
基本的使用就是這樣就ok了桥爽,另外如果想只對某些請求使用此功能,可以使用它的過濾方法:
app.use(compression({filter: shouldCompress}))
function shouldCompress (req, res) {
if (req.headers['x-no-compression']) {
// 這里就過濾掉了請求頭包含'x-no-compression'
return false
}
return compression.filter(req, res)
}
其他的功能請參考compression
的文檔昧识。
在nginx如何開啟
nginx也支持gzip壓縮钠四。下面為配置方法:
#on為啟用,off為關(guān)閉
gzip on;
#設(shè)置允許壓縮的頁面最小字節(jié)數(shù)跪楞,頁面字節(jié)數(shù)從header頭中的Content-Length中進行獲取缀去。默認值是0,不管頁面多大都壓縮甸祭。建議設(shè)置成大于1k的字節(jié)數(shù)缕碎,小于1k可能會越壓越大。
gzip_min_length 1k;
#獲取多少內(nèi)存用于緩存壓縮結(jié)果淋叶,‘4 16k’表示以16k*4為單位獲得
gzip_buffers 4 16k;
#gzip壓縮比(1~9)阎曹,越小壓縮效果越差伪阶,但是越大處理越慢,所以一般取中間值
gzip_comp_level 5;
#對特定的MIME類型生效,其中'text/html’被系統(tǒng)強制啟用
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
感謝閱讀处嫌!