使用Webpack的代码分离实现Vue懒加载

1 天前 · 188 次阅读

[使用Webpack的代码分离实现Vue懒加载(译文)

当一个Vue的项目体积变得十分庞大的时候,使用Webpack的代码分离功能将Vue ComponentsroutesVuex的代码进行分离并按需加载,会极大的提高App的首屏加载速度。

[图片上传失败...(image-e1ba33-1533613040860)]

在Vue的项目中,我们可以在三种不同的情况下使用懒加载和代码分离功能:

三者的共同点都是使用的动态import,这在Webpack的第二个版本就开始被支持。

在Vue组件中进行懒加载

在Eggheads中有关于使用Vue异步组件实现按需加载组件的解释。

实现异步组件只需要使用import函数去注册组件即可:

Vue.component('AsyncCmp', () => import('./AsyncCmp'))

也可以使用本地注册组件的方式:

new Vue({
  // ...
  components: {
    'AsyncCmp': () => import('./AsyncCmp')
  }
})

使用箭头函数指向import函数,Vue将会在需要该组件的时候才执行请求加载该组件的代码。

如果导入的组件是使用命名的方式进行导出的,你可以在Promise的返回值中使用对象解构的方式实现按需加载组件。下面是加载KeenUI的 UiAlert组件的例子:

components: {
  UiAlert: () => import('keen-ui').then(({ UiAlert }) => UiAlert)
}

在Vue router中进行懒加载

Vue router在原生支持懒加载。和懒加载组件的方式一样,都是使用import函数。例如我们想在/login这个路由下懒加载Login组件。

// 不再使用 import Login from './login'
const Login = () => import('./login')

new VueRouter({
  routes: [
    { path: '/login', component: Login }
  ]
})

在Vuex中进行懒加载

Vuex的registerModule方法允许我们动态的创建Vuex的模块。如果我们使用import函数在Promise中返回模块作为载荷(payload),就实现了懒加载。

const store = new Vuex.Store()

...

// 假设我们想加载'login'这个模块
import('./store/login').then(loginModule => {
  store.registerModule('login', loginModule)
})

总结

在Vue + Webpack中是懒加载十分简单。赶快使用上面学习到的方法将你的Vue项目进行代码分离并在它们需要的时候进行按需加载,这样可以显著减少应用首屏加载的时间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489...
    秋玄语道阅读 14,687评论 3 116
  • 网格化滴灌式3510教育模式,这是一种全新的提法,这是一次大胆的创新,这是一次野心的尝试,这是一次推陈出新...
    吾先生ING阅读 1,495评论 0 0
  • 蓦然回首,发现自己改变了。 深夜十一点多,身处外地,也没阻挡下我该做的事情。思路清晰,理智抛弃了懒惰,...
    siweier阅读 2,361评论 0 0
  • 昨天,正是我入职科瑞三周年纪念日,像是冥冥之中,因为也是我辞职的日子,离别总是伤感,回顾三年,说长不长说短不短,但...
    上岸者阅读 1,144评论 0 0