cnpm run build 文件過大,其中主要是vender.js有1.5M,代碼部署到服務器,首次訪問加載頁面時比較慢,耗時6.5s左右,所以需要優化下。
1、Nginx開啟gzip
找到nginx.config。關於gzip壓縮代碼:
http {
gzip on; #開啟或關閉gzip on off gzip_disable "msie6"; #不使用gzip IE6 gzip_min_length 100k; #gzip壓縮最小文件大小,超出進行壓縮(自行調節) gzip_buffers 4 16k; #buffer 不用修改 gzip_comp_level 3; #壓縮級別:1-10,數字越大壓縮的越好,時間也越長 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 壓縮文件類型 gzip_vary off; #跟Squid等緩存服務有關,on的話會在Header里增加 "Vary: Accept-Encoding" }
配置完重啟Nginx
識別gzip與非gzip請求
gzip請求:

非gzip請求:

gzip與非gzip在響應頭中區別就是Content-Encoding是否表明是gzip壓縮格式。
而上面通過接收數據與實際數據大小相比也能明顯看出差異
2、webpack gzip
vue項目中config/index.js
productionGzip: true, //是否開啟gizp壓縮
productionGzipExtensions: ['js', 'css'],
開啟后cnpm run build會生成*.gz文件。

上傳到服務器,測試查看接受文件大小。發現接收依然是1.5M的,而不是469K的,
莫非,webpack打包gzip文件毫無卵用?

3、gzip_static 靜態壓縮
經過一番百度,得一寶貝,gzip_static。什么東東呢?字面上意思就是:gzip靜態。
賣個關子:上面配置了,Nginx是可以開啟gzip壓縮,而且能夠實現壓縮效果。而它是如何工作的呢?
客戶端發起請求
-》Nginx接收請求
-》Nginx加載文件進行gzip打包壓縮成*.gz
-》返回給瀏覽器
-》瀏覽器解壓*.gz (應該是它干的,反正看不見)
也就是說,每次請求,Nginx都會進行壓縮返回、壓縮返回、壓縮返回、 將會導致浪費大量CPU。
這么個大bug是誰設計的?如果請求量大,CPU會不會掛掉?//猜測
當然,並不會,gizp打包壓縮后會臨時緩存,
所以,能不消耗CPU就不消耗CPU。
廢話太多,步入正題。放大招!!
http { gzip on; #開啟或關閉gzip on off gzip_static on;#是否開啟gzip靜態資源 gzip_disable "msie6"; #不使用gzip IE6 gzip_min_length 100k; #gzip壓縮最小文件大小,超出進行壓縮(自行調節) gzip_buffers 4 16k; #buffer 不用修改 gzip_comp_level 3; #壓縮級別:1-10,數字越大壓縮的越好,時間也越長 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 壓縮文件類型 gzip_vary off; #跟Squid等緩存服務有關,on的話會在Header里增加 "Vary: Accept-Encoding" }
重啟nginx,訪問服務器效果:變成459K了,耗時也少了不少

所以開啟gzip_static后。流程就會變成
//偷懶寫法
if(*.gz){ return *.gz //懶得壓縮直接扔文件
}else{ return gzip() //壓縮再扔給瀏覽器
}
nginx的gzip壓縮力度從1-9 。如果開啟過大,CPU會嚴重浪費,而webpack壓縮gzip默認是9。因此,打包壓縮gzip靜態資源是很有必要的。
補充一點:Gzip文件壓縮,如果不安裝那個插件,build是會報錯的,詳細如下:
Gzip 文件壓縮
順帶分享一個很6的優化打包的方法,用起來也簡單的很,只要下載一個插件,然后打開一個設置就好了。
設置方法:

這里其實是webpack自帶的一個優化打包的方法,在打包的時候,每個js和css文件會壓縮一個gz后綴的文件夾,瀏覽器如果支持g-zip,會自動查找有沒有gz文件,找到了就加載gz,然后本地解壓執行。
打開這個配置會之后對整體的打包體積也就是dist文件夾並沒有太大的變化。下圖來看看他的壓縮率以及對加載的提升,可以說是非常大且明顯的,大家可以自己試一下就知道多好用了。
