Vue首屏加載慢的優(yōu)化方案

使用vue構(gòu)建項(xiàng)目首屏加載時(shí),出現(xiàn)加載慢,白屏的問(wèn)題解決方案:

步驟一 webpack來(lái)打包vue項(xiàng)目,vendor.js過(guò)大問(wèn)題解決

  • 1.造成過(guò)大的原因是因?yàn)樵趍ain.js導(dǎo)入第三庫(kù)太多時(shí),webpack合并js時(shí)生成了vendor.js(我們習(xí)慣把第三方庫(kù)放在vendor里面)造成的.如下圖在main.js引用了一些第三方庫(kù)。導(dǎo)致了你的服務(wù)器端的js文件越大則用戶(hù)加載頁(yè)面的時(shí)間會(huì)越長(zhǎng)(因?yàn)樗柘螺djs的時(shí)間越久)
    首先在index.html中,使用CDN的資源,復(fù)制以下bootstrap的鏈接資源:
<body>
    <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>
    <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
    <script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script>
    <script src="https://unpkg.com/vue-awesome-swiper@2.6.7/dist/vue-awesome-swiper.js"></script>
</body>
  • 2.在bulid/webpack.base.conf.js文件中,添加externals,導(dǎo)入index.html下所需的資源模塊:
module.exports = {
  context: path.resolve(__dirname, '../'),
  entry: {
    app: ['babel-polyfill', 'lib-flexible', './src/main.js']
  },
  externals: { // <-添加
    vue: 'Vue',
    vuex: 'Vuex',
    'vue-router': 'VueRouter',
    VueAwesomeSwiper: 'VueAwesomeSwiper'
  },
  • 3.在main.js里將以下 import 注釋 替換 require 引入模塊
// import Vue from 'vue'
// import VueAwesomeSwiper from 'vue-awesome-swiper'

const Vue = require('vue')
const VueAwesomeSwiper = require('VueAwesomeSwiper')

Vue.use(VueAwesomeSwiper)
  • 4.當(dāng)然可以在生產(chǎn)環(huán)境當(dāng)中刪除掉不必要的console.log
    打開(kāi)build/webpack.prod.conf.js 在plugins里添加以下代碼
  plugins: [
    new webpack.optimize.UglifyJsPlugin({ //添加-刪除console.log
      compress: {
        warnings: false,
        drop_debugger: true,
        drop_console: true
      },
      sourceMap: true
    }),
  • 5.執(zhí)行npm run build
    在控制臺(tái)當(dāng)中可以看到文件壓縮的記錄
    static/js/vendor.50304a716a06fb947df7.js 的size
    我這里一開(kāi)始有450k 當(dāng)優(yōu)化完以后整整小了一半多 222kB(當(dāng)你用了一些ui組件庫(kù)替換成cdn說(shuō)不定更大的驚喜)


    sizexiao.png
  • 6.最后可以通過(guò)打開(kāi)項(xiàng)目測(cè)試在首屏加載時(shí)有著明顯的打開(kāi)提速效果!

步驟二 vue-cli開(kāi)啟打包壓縮 和后臺(tái)配合 gzip訪問(wèn)

  • 1.首先打開(kāi) config/index.js ,找到 build 對(duì)象中的 productionGzip ,改成 true
    1. 打開(kāi) productionGzip: true 之前,先要安裝依賴(lài) compression-webpack-plugin ,官方推薦的命令是:
npm install --save-dev compression-webpack-plugin 
//(此處有坑) 如果打包報(bào)錯(cuò),應(yīng)該是版本問(wèn)題 ,先卸載之前安裝的此插件 ,然后安裝低版本 
 npm install --save-dev compression-webpack-plugin@1.1.11
  • 3.等安裝好了,重新打包 npm run build ,此時(shí)打包的文件會(huì) 新增 .gz 文件。是不是比原來(lái)的js文件小很多呢,之后項(xiàng)目訪問(wèn)的文件就是這個(gè).gz文件
  • 4.后臺(tái)nginx開(kāi)啟gzip模式訪問(wèn),瀏覽器訪問(wèn)項(xiàng)目,自動(dòng)會(huì)找到 .gz 的文件。加載速度明顯提高。

開(kāi)啟 nginx gzip ,在 nginx.conf 配置文件中 配置

http {  //在 http中配置如下代碼,
   gzip on;
   gzip_disable "msie6"; 
   gzip_vary on; 
   gzip_proxied any;
   gzip_comp_level 8; #壓縮級(jí)別
   gzip_buffers 16 8k;
   #gzip_http_version 1.1;
   gzip_min_length 100; #不壓縮臨界值
   gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
 }

保存退出 ,并 重啟 nginx

systemctl reload nginx.service  
systemctl restart nginx.service
  • 5 測(cè)試訪問(wèn)
curl -I -H "Accept-Encoding: gzip, deflate" "http://xxx.com"  //訪問(wèn)請(qǐng)求中 Content-Encoding: gzip 表示 壓縮成功頁(yè)面,

同理 訪問(wèn)js,css等 可測(cè)試 是否壓縮成功.

  • 6 最后訪問(wèn)項(xiàng)目,進(jìn)入首頁(yè)的時(shí)候加載速度會(huì)有所提升
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容