路由懒加载

看到这个题目,首先要了解为什么要路由懒加载,懒加载又解决了什么问题?
为什么
当不使用赖加载时,webpack会将所有路由组件,合并打成一个js文件,使得该js文件的体积比较庞大,在首屏渲染时,浏览器解析的时间增加,进而导致首屏完成渲染的时间增长。使用赖加载可以将路由组件打包成多个js文件,当你需要哪些组件时,就加载哪些。首屏渲染时,只会加载首屏依赖的js文件,自然浏览器解析时间会缩短。
就比如人要每天吃三餐,每餐都是独立的,不使用赖加载就类似于在早餐的时候,你非要将三餐全部做好后再食用早餐,等待的时间就(已饿晕..)...

如何实现路由懒加载

vue的异步组件

export default new Router({
  routes: [
    {
      path: '/xxx',
      name: 'xxx',
      // 每一个异步组件会单独生成一个js文件
      component: resolve => require(['路径'], resolve)
    }
  ]
})

ES6动态导入import()

export default new Router({
  routes: [
    {
      path: '/xxx',
      name: 'xxx',
      // webpackChunkName chunk名称 同名会合并打包成一个js文件
      component: () => import(/* webpackChunkName: 'name' */ '路径')
    },
    {
      path: '/yyy',
      name: 'yyy',
      // webpackChunkName chunk名称
      component: () => import(/* webpackChunkName: 'name' */ '路径')
    },
  ]
})

webpack提供的[require.ensure]

require.ensure(
  // callback依赖的模块
  dependencies: String[],
  // 依赖加载完成后,webpack执行的回调
  callback: function(require),
  // webpack加载失败时执行的回调
  errorCallback: function(error),
  // 创建的chunk的名称,同名的会合并生成一个chunk
  chunkName: String
)
export default new Router({
  routes: [
    {
      path: '/xxx',
      name: 'xxx',
      component: resolve => require.ensure([], (require) => resolve(require('路径'), error => {}, 'chunkName')  
    },
  ]
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容