博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue异步组件处理路由组件加载状态
阅读量:4087 次
发布时间:2019-05-25

本文共 1526 字,大约阅读时间需要 5 分钟。

问题场景

在大型单页面应用中,处于对性能的考虑和首屏加载速度的要求,我们一般都会使用webpack的代码分割和vue-router的路由懒加载功能将我们的代码分成一个个模块,并且只在需要的时候才从服务器加载一个模块。

但是这种解决方案也有其问题,当网络环境较差时,我们去首次访问某个路由模块,由于加载该模块的资源需要一定的时间,那么该段时间内,我们的应用就会处于无响应的状态,用户体验极差。

解决方案

这种情况,我们一方面可以缩小路由模块代码的体积,静态资源使用cdn存储等方式缩短加载时间,另一方面则可以路由组件上使用异步组件,显示loading和error等状态,使用户能够得到清晰明了的操作反馈。

具体实现

  1. 声明方法,基于Vue动态组件工厂函数来返回一个Promise对象
/** * 处理路由页面切换时,异步组件加载过渡的处理函数 * @param  {Object} AsyncView 需要加载的组件,如 import('@/components/home/Home.vue') * @return {Object} 返回一个promise对象 */function lazyLoadView (AsyncView) {  const AsyncHandler = () => ({    // 需要加载的组件 (应该是一个 `Promise` 对象)    component: AsyncView,    // 异步组件加载时使用的组件    loading: require('@/components/public/RouteLoading.vue').default,    // 加载失败时使用的组件    error: require('@/components/public/RouteError.vue').default,    // 展示加载时组件的延时时间。默认值是 200 (毫秒)    delay: 200,    // 如果提供了超时时间且组件加载也超时了,    // 则使用加载失败时使用的组件。默认值是:`Infinity`    timeout: 10000  });  return Promise.resolve({    functional: true,    render (h, { data, children }) {      return h(AsyncHandler, data, children);    }  });}复制代码
  1. 引入路由
const helloWorld = () => lazyLoadView(import('@/components/helloWorld'))复制代码
  1. vue-router中使用
routes: [    {        path: '/helloWorld',        name: 'helloWorld',        component: helloWorld    }]复制代码

至此,改造已经完成,当你首次加载某一个组件的资源时(可以将网速调为 slow 3g,效果更明显),就会显示你在loading组件的内容,而当超出超时时间仍未加载完成该组件时,那么将显示error组件的内容(建议error组件尽量简单,因为当处于低速网络或者断网情况下时,error组件内的图片资源等有可能出现无法加载的问题)

作者:fisher-zh
链接:https://juejin.im/post/5b90d0fcf265da0aa81bd728
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的文章
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>
F330装GPS的位置
查看>>
pixhawk也可以用Airsim仿真
查看>>
《无人机电机与电调技术》可以看看
查看>>
我发现七月在线的GAAS课程基本都讲到了
查看>>
电机堵转
查看>>
carzepony也在想往FreeRTOS上迁移
查看>>
可以买个好点的电烙铁
查看>>
ACfly调参记录(包括ACfly-F330和ACfly-T265)
查看>>
一定记得每飞几次或者隔一天要把螺丝和浆帽拧一次,确实会松的
查看>>
《多旋翼无人飞行器嵌入式飞控开发指南》里基于FreeRTOS的无人机软件框架
查看>>
思岚A1的SDK其实很好读懂,每个函数清晰明了,可以直接调用
查看>>
pixhawk(PX4)的一些论坛网站(包括中文版的PX4用户手册和PX4开发手册)
查看>>
串级 PID 为什么外环输出是内环的期望?(和我之前对串级PID的总结一样)
查看>>
我刚刚才完全清楚GPS模块的那根杆子是怎么固定安装好的
查看>>
去github里面找找也没有别人无人机+SLAM的工程
查看>>
PX4与ROS关系以及仿真控制(键盘控制无人机)
查看>>
我对无人机重心高度的理解
查看>>
现在明白为什么无名博客里好几篇文章在讲传感器的滞后
查看>>