Vue的异步加载组件(按需加载)与路由懒加载

4 篇文章 0 订阅
1 篇文章 0 订阅

异步组件介绍

在开发大型项目的时候,我们会把大型项目根据组件分割为小块代码,然后异步加载代码块,这样可以让首屏部分代码块优先加载,加快首屏渲染速度,其他代码块在需要的时候再加载,加载过的代码块会被缓存起来,以便复用重新渲染。
参考Vue官方文档异步加载.

异步组件声明

异步组件声明主要通过将 Vue.component() 方法的第二个声明为工厂函数,这个工厂函数会收到一个 resolve 回调,这个回调函数会在你从服务器得到组件定义的时候被调用。你也可以调用 reject(reason) 来表示加载失败。一个推荐的做法是将异步组件和 webpack 的 code-splitting 功能一起配合使用,下面的require是webpack支持的AMD异步加载方式,require方法的第二个参数是加载成功后的回调函数,我们在组件资源加载成功后,调用resolve完成组件注册

Vue.component('async-webpack-example', function (resolve,reject) {
  // 这个特殊的 `require` 语法将会告诉 webpack
  // 自动将你的构建代码切割成多个包,这些包
  // 会通过 Ajax 请求加载
  require(['./my-async-component'], resolve)
})

你也可以在工厂函数中返回一个 Promise,所以把 webpack 2 和 ES2015 语法加在一起,我们可以这样使用动态导入:

Vue.component(
  'async-webpack-example',
  // 这个动态导入会返回一个 `Promise` 对象。
  () => import('./my-async-component')
)

然后可能有些使用webpack的同学编译的时候会报错Unexpected token ,正好在import语法的地方,为了支持动态导入 import() 需要安装babel插件,Babel@6需要使用babel-plugin-syntax-dynamic-import,Babel@7使用@babel/plugin-syntax-dynamic-import
在.bablerc中引入syntax-dynamic-import插件

 npm install --save-dev @babel/plugin-syntax-dynamic-import
 {
    "plugins": ["@babel/plugin-syntax-dynamic-import"]
  }

上面都是全局注册,我们也可以组件内局部注册

export default{
  // ...
  components: {
    'my-component': () => import('./my-async-component')
  }
}

或者使用require方法

export default{
  // ...
  components: {
    'lotteryResultH5': (resolve) => require(['./lottery-result-h5'], resolve),
  }
}

路由懒加载介绍

通过异步组件和webpacm代码分割,实现路由懒加载,按需加载,提升路由页面加载速度。

路由懒加载方法

通过工厂函数返回一个Promise对象,异步加载组件

import() 返回一个promise对象

var myComponent = () => import('./my-component')
const routes = [
    {
     name: "MyCompoent",
     path: 'my-compoent',
     component: myComponent
    }
]

通过AMD异步加载方式(require)

const routes = [
    {
     name: "MyCompoent",
     path: 'my-compoent',
     component: (resolve) => require(['./my-component'], resolve),
    }
]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值