当一个Vue的项目体积变得十分庞大的时候,使用Webpack的代码分离功能将Vue Components
,routes
或Vuex
的代码进行分离并按需加载,会极大的提升App的首屏加载速度。html
在Vue的项目中,咱们能够在三种不一样的状况下使用懒加载和代码分离功能:vue
三者的共同点都是使用的动态import,这在Webpack的第二个版本就开始被支持。git
在Eggheads中有关于使用Vue异步组件实现按需加载组件的解释。github
实现异步组件只须要使用import
函数去注册组件便可:less
Vue.component('AsyncCmp', () => import('./AsyncCmp'))
也能够使用本地注册组件的方式:异步
new Vue({ // ... components: { 'AsyncCmp': () => import('./AsyncCmp') } })
使用箭头函数指向import
函数,Vue
将会在须要该组件的时候才执行请求加载该组件的代码。async
若是导入的组件是使用命名的方式进行导出的,你能够在Promise
的返回值中使用对象解构的方式实现按需加载组件。下面是加载KeenUI的 UiAlert组件的例子:ide
components: { UiAlert: () => import('keen-ui').then(({ UiAlert }) => UiAlert) }
Vue router在原生支持懒加载。和懒加载组件的方式同样,都是使用import
函数。例如咱们想在/login
这个路由下懒加载Login
组件。函数
// 再也不使用 import Login from './login' const Login = () => import('./login') new VueRouter({ routes: [ { path: '/login', component: Login } ] })
Vuex的registerModule
方法容许咱们动态的建立Vuex的模块。若是咱们使用import
函数在Promise
中返回模块做为载荷(payload),就实现了懒加载。学习
const store = new Vuex.Store() ... // 假设咱们想加载'login'这个模块 import('./store/login').then(loginModule => { store.registerModule('login', loginModule) })
在Vue + Webpack中是懒加载十分简单。赶快使用上面学习到的方法将你的Vue项目进行代码分离并在它们须要的时候进行按需加载,这样能够显著减小应用首屏加载的时间。
原文连接: Lazy Loading in Vue using Webpack's Code Splitting