路由懒加载

路由懒加载
当打包构建应用时,Javascript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。
结合 Vue 的 异步组件 和 Webpack 的 code splitting feature, 轻松实现路由组件的懒加载。
我们要做的就是把路由对应的组件定义成异步组件:
<pre>
// require.ensure 是 Webpack 的特殊语法,用来设置 code-split point
// (代码分块)
const Foo = resolve => { require.ensure(['./Foo.vue'], () => { resolve(require('./Foo.vue')) })}
</pre>
这里还有另一种代码分块的语法,使用 AMD 风格的 require,于是就更简单了:
<pre>
const Foo = resolve => require(['./Foo.vue'], resolve)
</pre>
不需要改变任何路由配置,跟之前一样使用 Foo:
<pre>
const router = new VueRouter({ routes: [ { path: '/foo', component: Foo } ]})
</pre>
把组件按组分块
有时候我们想把某个路由下的所有组件都打包在同个异步 chunk 中。只需要 给 chunk 命名,提供 require.ensure
第三个参数作为 chunk 的名称:
<pre>
const Foo = r => require.ensure([], () => r(require('./Foo.vue')), 'group-foo')const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo')const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo')
</pre>
Webpack 将相同 chunk 下的所有异步模块打包到一个异步块里面 —— 这也意味着我们无须明确列出 require.ensure
的依赖(传空数组就行)。

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

推荐阅读更多精彩内容

  • 作者:Joshua Bemenderfer原文地址: lazy-loading-routes译者:jeneser ...
    jeneser阅读 11,488评论 3 21
  • 前几日听到一句生猛与激励并存,可怕与尴尬同在,最无奈也无解的话:“90后,你的中年危机已经杀到”。这令我很受触动。...
    王钰峰阅读 9,897评论 1 22
  • 张文质老师说:“美好的人总会相遇。” 是的,我确信。 1 2004年9月,我正式开始了教师生涯。 在见习期里,我遇...
    陈蕾FZ阅读 4,355评论 0 50
  • 入耳一夜滴阶雨, 天明月半虫先声。 一骑红尘妃子笑, 无人知是梦中来。
    伪帝阅读 1,930评论 0 0
  • 你喜欢的油菜花开了 你还记得你喜欢的油菜花吗? 你肯定会说:我喜欢的油菜花,怎么会忘记? 那你今年一定不知道,油菜...
    古小枫阅读 3,180评论 0 2