前端性能優化篇(一)開啓nginx gzip壓縮

什麼是GZIP

GZIP是若干文件壓縮程序的簡稱,通常指GNU計劃的實現,此處的GZIP代表的就是GUN ZIP,這也是HTTP1.1協議定義的兩種壓縮方法中最常用的一種壓縮方法,客戶端瀏覽器大都支持這種壓縮格式。(下面兩圖我們對比下設置gzip前後對比)

不設置服務器gzip的情況下

在設置服務器gzip之後

我們發現,設置gzip之後,獲取同樣的數據。壓縮之後的數據量大概是原始數據的1/4。同樣的,獲取數據的時間也大大降低。極大的優化了用戶的體驗。

設置 nginx GZIP

編輯nginx配置文件 nginx.conf 找到如下代碼並更改如下:

 gzip on;  開啓壓縮
        gzip_min_length 1k;   設置壓縮最小單位,小於不壓縮
    #gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    gzip_comp_level 4;  壓縮比
    gzip_buffers 4 16k;  
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;  壓縮內容

gzip on|off

默認值: gzip off
開啓或者關閉gzip模塊

gzip_static on|off

nginx對於靜態文件的處理模塊
該模塊可以讀取預先壓縮的gz文件,這樣可以減少每次請求進行gzip壓縮的CPU資源消耗。該模塊啓用後,nginx首先檢查是否存在請求靜態文件的gz結尾的文件,如果有則直接返回該gz文件內容。爲了要兼容不支持gzip的瀏覽器,啓用gzip_static模塊就必須同時保留原始靜態文件和gz文件。這樣的話,在有大量靜態文件的情況下,將會大大增加磁盤空間。我們可以利用nginx的反向代理功能實現只保留gz文件。

gzip_comp_level 4

默認值:1(建議選擇爲4)
gzip壓縮比/壓縮級別,壓縮級別 1-9,級別越高壓縮率越大,當然壓縮時間也就越長(傳輸快但比較消耗cpu)。

gzip_buffers 4 16k

默認值: gzip_buffers 4 4k/8k
設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。 例如 4 4k 代表以4k爲單位,按照原始數據大小以4k爲單位的4倍申請內存。 4 8k 代表以8k爲單位,按照原始數據大小以8k爲單位的4倍申請內存。
如果沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。

gzip_types mime-type [mime-type ...]

默認值: gzip_types text/html (默認不對js/css文件進行壓縮)
壓縮類型,匹配MIME類型進行壓縮
不能用通配符 text/*
(無論是否指定)text/html默認已經壓縮
設置哪壓縮種文本文件可參考 conf/mime.types

gzip_min_length 1k

默認值: 0 ,不管頁面多大都壓縮
設置允許壓縮的頁面最小字節數,頁面字節數從header頭中的Content-Length中進行獲取。
建議設置成大於1k的字節數,小於1k可能會越壓越大。 即: gzip_min_length 1024

gzip_http_version 1.0|1.1

默認值: gzip_http_version 1.1(就是說對HTTP/1.1協議的請求才會進行gzip壓縮)
識別http的協議版本。由於早期的一些瀏覽器或者http客戶端,可能不支持gzip自解壓,用戶就會看到亂碼,所以做一些判斷還是有必要的。
注:99.99%的瀏覽器基本上都支持gzip解壓了,所以可以不用設這個值,保持系統默認即可。
假設我們使用的是默認值1.1,如果我們使用了proxy_pass進行反向代理,那麼nginx和後端的upstream server之間是用HTTP/1.0協議通信的,如果我們使用nginx通過反向代理做Cache Server,而且前端的nginx沒有開啓gzip,同時,我們後端的nginx上沒有設置gzip_http_version爲1.0,那麼Cache的url將不會進行gzip壓縮

gzip_proxied[off|expired|nocache|nostore|private|no_last_modified|no_etag|auth|any] ...

默認值:off
Nginx作爲反向代理的時候啓用,開啓或者關閉後端服務器返回的結果,匹配的前提是後端服務器必須要返回包含"Via"的 header頭。
off - 關閉所有的代理結果數據的壓縮
expired - 啓用壓縮,如果header頭中包含 "Expires" 頭信息
no-cache - 啓用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息
no-store - 啓用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息
private - 啓用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息
no_last_modified - 啓用壓縮,如果header頭中不包含 "Last-Modified" 頭信息
no_etag - 啓用壓縮 ,如果header頭中不包含 "ETag" 頭信息
auth - 啓用壓縮 , 如果header頭中包含 "Authorization" 頭信息
any - 無條件啓用壓縮

gzip_vary on

和http頭有關係,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費不支持的也壓縮,所以根據客戶端的HTTP頭來判斷,是否需要壓縮

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章