gzip壓縮文件&webPack配置Compression-webpack-plugin


gzip壓縮文件&webPack配置Compression-webpack-plugin

作用:提升網絡傳輸速率=>優化web頁面加載時間

基本原理

  1. 瀏覽器請求資源文件時會自動帶一個Accept-Encoding的請求頭告訴服務器支持的壓縮編碼類型

  2. 服務器配置開啟gzip選項

    接收客戶端資源文件請求,查看請求頭Content-encoding支持的壓縮編碼格式,如果是包含gzip那么
    在每次響應資源請求之前進行gzip編碼壓縮后再響應返回資源文件(在響應頭會帶上Content-encoding: gzip)

  3. 瀏覽器接收到響應后查看請求頭是否帶有Content-encoding:gzip,如果有進行對返回的資源文件進行解壓縮然后再進行解析渲染

注意點

  • 低版本瀏覽器兼容性,服務器可以設置一些忽略規則忽略為瀏覽器
  • 媒體文件無需開啟:圖片、音樂和視頻大多數都已壓縮過了,HTML,CSS AND JAVARSCRIPT
  • CPU負載:壓縮文件耗費CPU(服務器需要壓縮文件、瀏覽器解壓文件)

webpack優化

  • 如果你使用了webpack,那么可以借助CompressionWebpackPlugin插件來提前對文件進行Gzip壓縮
  • 這樣服務器查找到有與源文件同名的.gz文件就會直接讀取,不會主動壓縮,降低cpu負載,優化了服務器性能
  • webpack配置:

其他相關

Content-Encoding

gzip
表示采用 Lempel-Ziv coding (LZ77) 壓縮算法,以及32位CRC校驗的編碼方式。這個編碼方式最初由 UNIX 平台上的 gzip 程序采用。出於兼容性的考慮, HTTP/1.1 標准提議支持這種編碼方式的服務器應該識別作為別名的 x-gzip 指令。

compress
采用 Lempel-Ziv-Welch (LZW) 壓縮算法。這個名稱來自UNIX系統的 compress 程序,該程序實現了前述算法。
與其同名程序已經在大部分UNIX發行版中消失一樣,這種內容編碼方式已經被大部分瀏覽器棄用,部分因為專利問題(這項專利在2003年到期)。

deflate
采用 zlib 結構 (在 RFC 1950 中規定),和 deflate 壓縮算法(在 RFC 1951 中規定)。

identity
用於指代自身(例如:未經過壓縮和修改)。除非特別指明,這個標記始終可以被接受。

br
表示采用 Brotli 算法的編碼方式。

引自MDNhttps://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Encoding

  • 兼容性

服務器啟用gzip

  • node端
    nodejs很幸福,只需use一個compress模塊
var compression = require('compression')
var app = express();
//盡量在其他中間件前使用compression
app.use(compression());
  • tomcat
    找到tomcat的server.xml文件,找到其中Connector節點然后進行配置修改,具體配置如下
<Connectorport="80"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" maxPostSize="0" useBodyEncodingForURI="true"compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,image/jpeg,application/json"/>
  • nginx
    gzip使用環境:http,server,location,if(x),一般把它定義在nginx.conf的http{…..}之間

gzip on
on為啟用,off為關閉

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

gzip_buffers 4 16k
獲取多少內存用於緩存壓縮結果,‘4 16k’表示以16k*4為單位獲得

gzip_comp_level 5
gzip壓縮比(1~9),越小壓縮效果越差,但是越大處理越慢,所以一般取中間值;

gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php
對特定的MIME類型生效,其中'text/html’被系統強制啟用

gzip_http_version 1.1
識別http協議的版本,早起瀏覽器可能不支持gzip自解壓,用戶會看到亂碼

gzip_vary on
啟用應答頭"Vary: Accept-Encoding"

gzip_proxied off
nginx做為反向代理時啟用,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_modefied(啟用壓縮,header頭中不包含"Last-Modified"),no_etag(啟用壓縮,如果header頭中不包含"Etag"頭信息),auth(啟用壓縮,如果header頭中包含"Authorization"頭信息)

gzip_disable msie6
(IE5.5和IE6 SP1使用msie6參數來禁止gzip壓縮 )指定哪些不需要gzip壓縮的瀏覽器(將和User-Agents進行匹配),依賴於PCRE庫

服務器配置引自juan26=>https://segmentfault.com/a/1190000012571492?utm_source=tag-newest


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM