做爲一個網站應用,加載速度是很是重要的。加載速度,一個是程序的合理安排,如以組件按需加載,一個是js、css等資源的異步加載。css
在Vue項目中,引入到工程中的全部js、css文件,編譯時都會被打包進vendor.js,瀏覽器在加載該文件以後才能開始顯示首屏。如果引入的庫衆多,那麼vendor.js文件體積將會至關的大,影響首開的體驗。html
解決方法是,將引用的外部js、css文件剝離開來,不編譯到vendor.js中,而是用資源的形式引用,這樣瀏覽器可使用多個線程異步將vendor.js、外部的js等加載下來,達到加速首開的目的。vue
外部的庫文件,可使用CDN資源,或者別的服務器資源等。webpack
下面,以引入vue、vuex、vue-router爲例,說明處理流程。web
在index.html中,添加CDN資源,例如bootstrap上的資源:vue-router
<body> <div id="app"></div> <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> </body>
在bulid/webpack.base.conf.js文件中,增長externals,將引用的外部模塊導入,以下:vuex
module.exports = { entry: { app: './src/main.js' }, externals:{ 'vue': 'Vue', 'vue-router': 'VueRouter', 'vuex':'Vuex' }
注意一點:npm
格式爲 'aaa' : 'bbb', 其中,aaa表示要引入的資源的名字,bbb表示該模塊提供給外部引用的名字,由對應的庫自定。例如,vue爲Vue,vue-router爲VueRouter.bootstrap
去掉import,如:瀏覽器
// import Vue from 'vue' // import Router from 'vue-router'
去掉Vue.use(XXX),如:
// Vue.use(Router)
從新npm run build,會看到 vendor.js體積有所降低了。我自已的我的主頁中,將全部的外部模塊,使用CDN引入以後,vendor.js從1M,降爲30k左右。
經過開發者模式的Network工具,能夠看到vue.js、vuex.js、vendor.js等文件會分別由一個線程進行加載。且由於使用了CDN,減輕了帶寬壓力。