nginx配置解決vue單頁面打包文件大,首次加載慢的問題


  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文件夾並沒有太大的變化。下圖來看看他的壓縮率以及對加載的提升,可以說是非常大且明顯的,大家可以自己試一下就知道多好用了。

 


免責聲明!

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



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