vue 項目優(yōu)化

Vue項目優(yōu)化

一. 項目優(yōu)化策略

  1. 第三方庫啟用 CDN

  2. ui 組件按需加載

  3. 路由懶加載

  4. 首屏內(nèi)容定制

  5. gzip 開啟

二. 項目添加 nprogress 進度條

  1. 安裝依賴包
  npm i nprogress -S 
  1. 在main.js 中導入依賴包和樣式
  import NProgress from 'nprogress' 
  import 'nprogress/nprogress.css'
  1. 在axios請求攔截器和響應攔截器中配置啟動和結(jié)束
// axios 請求攔截
axios.interceptors.request.use(function (config) {
  NProgress.start()
  return config
})

// axios 響應攔截
axios.interceptors.response.use(function (response) {
  NProgress.done()
  return response
})

三. 自動移除 console.log

  1. 安裝依賴包
  yarn add babel-plugin-transform-remove-console -D 
  1. 在 .babelrc | babel.config.js 文件中配置 plugins 插件
const prodPlugins = []
// 生產(chǎn)環(huán)境移除console
if (process.env.NODE_ENV === 'production') {
  prodPlugins.push('transform-remove-console')
}
module.exports = {
  'presets': [
    '@vue/app'
  ],
  plugins: [
    [
      'import',
      {
        'libraryName': 'vant',
        'libraryDirectory': 'es',
        'style': true
      },
      'vant'
    ],
    ...prodPlugins
  ]
}

四. 通過可視化的 ui 面板查看報告(推薦)

在可視化的ui面板中患朱,通過控制臺分析面板裸诽, 可以方便的查看存在的問題

五. vue-cli3.0 webpack全局配置 vue.config.js

https://cli.vuejs.org/zh/config

六. 為開發(fā)模式與發(fā)布模式設置不同的打包入口

  1. 配置開發(fā)入口文件 src/main-dev.js 和發(fā)布模式入口文件 src/main-prod.js

  2. 通過 configureWebpack 或者 chainWebpack 來修改默認的配置

configureWebpack 通過對象形式操作

chainWebpack 通過鏈式形式操作

  1. 在 vue.config.js 文件中通過 chainWebpack 修改入口文件
module.exports = {
  chainWebpack: config => {
    // 發(fā)布模式
    config.when(process.env.NODE_ENV === 'production', config => {
      config
        .entry('app')
        .clear()
        .add('./src/main-prod.js')
    })
    // 開發(fā)模式
    config.when(process.env.NODE_ENV === 'development', config => {
      config
        .entry('app')
        .clear()
        .add('./src/main-dev.js')
    })
  }
}

七. 通過 externals 加載外部 CDN 資源

  1. 配置 vue.config.js
chainWebpack: config => {
    // 發(fā)布模式
    config.when(process.env.NODE_ENV === 'production', config => {
      config
        .entry('app')
        .clear()
        .add('./src/main-prod.js')
      config
        .set('externals', {
          vue: 'Vue',
          'vue-router': 'VueRouter',
          'element-ui': 'elementUi',
          axios: 'axios',
          nprogress: 'NProgress'
        })
    })
    // 開發(fā)模式
    config.when(process.env.NODE_ENV === 'development', config => {
      config
        .entry('app')
        .clear()
        .add('./src/main-dev.js')
    })
  }
  1. 在 index.html 文件中引入 CDN服務依賴文件
<!-- nprogress 的樣式表文件 -->
  <link rel="stylesheet"  />
  <!-- vant 的樣式表文件 -->
  <link rel="stylesheet" >

  <script src="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script>
  <script src="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script>
  <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
  <!-- nprogress 的 js 文件 -->
  <script src="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script>
  <!-- moment 的 js 文件 -->
  <script src="https://cdn.staticfile.org/moment.js/2.24.0/moment.min.js"></script>
  <!-- vant 的 js 文件 -->
  <script src="https://cdn.jsdelivr.net/npm/vant@2.1/lib/vant.min.js"></script>

  ps: vant ui  引入CDN文件之后橙依,可以直接去掉 按需引入

八. 首頁內(nèi)容定制

  1. 配置 vue.config.js
chainWebpack: config => {
    // 發(fā)布模式
    config.when(process.env.NODE_ENV === 'production', config => {
      // 配置入口文件
      config
        .entry('app')
        .clear()
        .add('./src/main-prod.js')
      // 配置CDN
      config
        .set('externals', {
          vue: 'Vue',
          'vue-router': 'VueRouter',
          axios: 'axios',
          nprogress: 'NProgress',
          moment: 'moment'
        })
      // 配置首頁定制
      config.plugin('html').tap(args => {
        args[0].isProd = true
        return args
      })
    })
    // 開發(fā)模式
    config.when(process.env.NODE_ENV === 'development', config => {
      config
        .entry('app')
        .clear()
        .add('./src/main-dev.js')
      // 配置首頁定制
      config.plugin('html').tap(args => {
        args[0].isProd = false
        return args
      })
    })
  }
  1. 在index.html中通過流程控制 是否加載CDN資源
<title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>mall-vue</title>
  <% if(htmlWebpackPlugin.options.isProd){ %>
  <title>vue-ssr</title>
  <!-- nprogress 的樣式表文件 -->
  <link rel="stylesheet"  />

  <!-- vant 的樣式表文件 -->
  <link rel="stylesheet" >

  <script src="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script>
  <script src="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script>
  <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
  <!-- nprogress 的 js 文件 -->
  <script src="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script>
  <!-- moment 的 js 文件 -->
  <script src="https://cdn.staticfile.org/moment.js/2.24.0/moment.min.js"></script>
  <!-- vant 的 js 文件 -->
  <script src="https://cdn.jsdelivr.net/npm/vant@2.1/lib/vant.min.js"></script>
  <%}%>

九. 實現(xiàn)路由懶加載

  1. 安裝依賴包
yarn add @babel/plugin-syntax-dynamic-import -D 
  1. 配置 babel.config.js
  plugins: [
    '@babel/plugin-syntax-dynamic-import'
  ]
  1. 按需加載路由組件
const About = () => import(/* webpackChunkName: "about" */ './views/About.vue')
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末使鹅,一起剝皮案震驚了整個濱河市纵散,隨后出現(xiàn)的幾起案子暑诸,更是在濱河造成了極大的恐慌,老刑警劉巖愕难,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哈垢,死亡現(xiàn)場離奇詭異妻柒,居然都是意外死亡,警方通過查閱死者的電腦和手機耘分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門举塔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人求泰,你說我怎么就攤上這事啤贩。” “怎么了拜秧?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長章郁。 經(jīng)常有香客問我枉氮,道長,這世上最難降的妖魔是什么暖庄? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任聊替,我火速辦了婚禮,結(jié)果婚禮上培廓,老公的妹妹穿的比我還像新娘惹悄。我一直安慰自己,他們只是感情好肩钠,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布泣港。 她就那樣靜靜地躺著,像睡著了一般价匠。 火紅的嫁衣襯著肌膚如雪当纱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天踩窖,我揣著相機與錄音坡氯,去河邊找鬼。 笑死洋腮,一個胖子當著我的面吹牛箫柳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啥供,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼悯恍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滤灯?” 一聲冷哼從身側(cè)響起坪稽,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤曼玩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窒百,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黍判,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年篙梢,在試婚紗的時候發(fā)現(xiàn)自己被綠了顷帖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渤滞,死狀恐怖贬墩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妄呕,我是刑警寧澤陶舞,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站绪励,受9級特大地震影響肿孵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疏魏,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一停做、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧大莫,春花似錦蛉腌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至羔味,卻和暖如春蜀变,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背介评。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工库北, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人们陆。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓寒瓦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坪仇。 傳聞我的和親對象是個殘疾皇子杂腰,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容