關於vue的懶加載實踐

最近在研究vue的按需加載,好奇怪,以前好像並無看到vue的官文裏面有這一部分,是我看差了嗎hahaha~尬笑~html

其實只須要看vue-router官文就能夠了,裏面有懶加載的講解,而且附帶了詳細內容的鏈接。一個一個看過去,很容易操做了。
因而我看了一下。作個記錄,防止忘記了又要從新看一遍。
首先是使用的vue-cli構建的簡單項目
把多餘的東西都刪掉,剩下一個HelloWord.vue
而後修改目錄接口,新建一個pages目錄,把HelloWord.vue放進去,components目錄新建兩個文件,test1.vue test2.vue。pages目錄新建一個Page2.vue
那麼就用這四個文件來測試一下vue

pages目錄下:
HelloWord.vue
Page2.vuewebpack

components目錄下:
test1.vue
test2.vueweb

修改路由router.js內容爲:vue-router

import Vue from 'vue'
import Router from 'vue-router'
// 這裏用到了webpack2的import()它會返回一個promise
let HelloWorld = () => import('@/pages/HelloWorld')
let Page2 = () => import('@/pages/Page2')
Vue.use(Router)
export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/page2',
      name: 'Page2',
      component: Page2
    }
  ]
})

而後改寫HelloWord.vue和Page2.vue的組件引入形式,也是使用import(),
HelloWord.vuevue-cli

<template>
  <div class="hello">
    <h1>HOME</h1>
    <router-link to="/page2">page2</router-link>
    <test1 :value="a">{{a}}</test1>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  components: {
    'test1': () => import('../components/test1')
  },
  data () {
    return {
      a: 'a test value.'
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
  font-weight: normal;
}
</style>

最後是根據webpack的分塊加載形式修改webpack設置
在根目錄下的build/webpack.prod.confj.js
添加new webpack.optimize.CommonsChunkPlugin("common.js")promise

clipboard.png

而後打包就能夠看到效果了。
打包後的文件:緩存

clipboard.png

那些[number].[hash].js的文件就是頁面分塊後的文件了,加載頁面時出了那些公共模塊,會對應只加載響應頁面模塊。而且緩存起來。因此很大程度上優化了頁面的初始加載速度。ide

最後Page2.vue, test1.vue, test2.vue的內容就不貼了,實際上是很簡單是實例來的。只是爲了測試按需加載隨便寫的而已。測試

參考:
vue-router
webpack官文
示例博文

相關文章
相關標籤/搜索