likes
comments
collection
share

优化数据请求——前端调用接口篇!写在前面的话 最近开发的会议系统,随着会议规模的增加,在人员排座方面就迎来了首次加载缓慢

作者站长头像
站长
· 阅读数 59

写在前面的话

最近开发的会议系统,随着会议规模的增加,在人员排座方面就迎来了首次加载缓慢的问题。优化就在所难免了,那么是修修补补还是直接重构呢?想起我那屎山代码领路人说的一句名言

“代码能跑就行的,跑不动了再重构!”

本着这个原则,重构是不可能的。 那么该如何最小化的优化这屎山代码呢?接下来进入正题!

优化逻辑

在不对接口本身进行优化的前提下,前端提升接口请求的速度可以是:

1.能不查的就不查(接口后置,待一定条件下用到的时候再进行查询)

2.能一起查的就一起查(同步变异步)

3.能少查的就少查(如分页等,展示部分信息)

业务分析

要优化接口就要理解这些接口是在什么场景下面调用的。 那么从待优化的界面上大致可以分成:

  • 顶部区域(top):功能有控制底部排座面板的拖动,放大,缩小,概览,切换成智能排座,各类排座内容的配置等功能。
  • 左部区域(left):功能有展示参会人员,对参会人员进行分类,并拖动勾选的人员到底部面板进行排座。
  • 底部区域(bottom):功能为对会议布局的操作,展示布局,单个或批量的对人员进行拖拉拽的操作。 优化数据请求——前端调用接口篇!写在前面的话 最近开发的会议系统,随着会议规模的增加,在人员排座方面就迎来了首次加载缓慢 再结合对应布局所涉及的接口 优化数据请求——前端调用接口篇!写在前面的话 最近开发的会议系统,随着会议规模的增加,在人员排座方面就迎来了首次加载缓慢

再罗列出页面涉及到的接口和所耗费的时长:

接口名称接口耗时/毫秒
获取参会人员信息fhy/meetingreportuser/getReportUserList2570
获取会议室布局fhy/meetingroom/get516.84
获取参会人员单位别名fhy/fhySeatMapController/seatInfoByConfig387.20
获取会议分组信息fhy/meetinggroup/getGroup368.84
获取会议信息fhy/meetingnotice/get26.48
获取座位显示配置fhy/meetingseatconfig/getConfig48.51

读到这里应该对业务有个大致的理解了

哪些接口可以先查?

了解过业务之后可以找到 获取会议分组信息(fhy/meetinggroup/getGroup) 该接口可以先不在页面初始化的时候进行操作。

那么已知人员进行筛选的时候才用到的分组信息,求如何优化页面初始化接口?

答:接口懒加载,在涉及分组查询时加载对应数据,供搜索使用。

哪些接口可以一起查?

能一起查的接口是在筛选完先不查询的接口的条件之下进行的。在该场景下面可以得出,除了获取会议信息(fhy/meetingnotice/get)的接口必须先查之外其他接口都是可以放在一起查询的。判断能否一起查询的接口的条件也很简单(敲黑板了)咚咚咚。

一个接口的入参是否依赖另一个接口的返参,没有依赖则可同时查询!

一个不正经前端

屎山代码在这个时候就出现问题了,因为之前的编程风格是可以说是模块化的,每个区域对应一个初始化流程

1.获取数据=>2.渲染页面=>3.绑定事件

大致的页面加载顺序如下图 优化数据请求——前端调用接口篇!写在前面的话 最近开发的会议系统,随着会议规模的增加,在人员排座方面就迎来了首次加载缓慢 那么如上的编程风格的话就很难进行同时加载接口的操作。于是需要把每个模块的获取数据放在一起,达到下面的加载顺序就可以轻轻松松的完成同步查询的逻辑了。

优化数据请求——前端调用接口篇!写在前面的话 最近开发的会议系统,随着会议规模的增加,在人员排座方面就迎来了首次加载缓慢

代码层面的同步查询如下:

 // pTop.initData() 顶部区域获取数据
 // pBottom.initData() 底部区域获取数据`
 // pLeft.initData() 左部区域获取数据
 await Promise.all([pLeft.initData(),pTop.initData(),pBottom.initData()])
 

Promise.all 方法好呀!Promise.all 方法棒呀! Promise.all 会等到入参数组 里面的方法全部执行完才会进行下面的代码逻辑。

哪些接口可以少查呢?

曾经有那么一瞬间我觉得我可以把握住她,让她为我改变,可惜我错了,被她那天真的脸庞给迷惑了。没错我说的是获取人员信息的接口(fhy/meetingreportuser/getReportUserList),我本以为该接口可以进行分页,从左部区域我已经看到了分页组件。

优化数据请求——前端调用接口篇!写在前面的话 最近开发的会议系统,随着会议规模的增加,在人员排座方面就迎来了首次加载缓慢

不曾想到是前端分页的,我带着三分疑惑,97分自信寻觅这接口调用的出处。看完潸然泪下,获取人员信息的接口不止用于左边面板的展示,还牵扯到底部面板人员的排座信息。底部的会议室布局座位是全部展示的,那对应的人员座位信息必然需要全部查出。如果要对获取参会人员信息的接口分页,那必须由另一个接口承当起人员的座位信息。 我恨呐,恨获取参会人员信息的接口接口太全面了。

其实本来不需要折腾这么久的,接口不行就在接口本身找问题。 接口他努力了吗?用了这么久的接口了,速度提升了吗?返回的垃圾数据变少了吗?关联的表变少了吗? 接下来就是后端同学的接口本口优化篇。

未完待续...

转载自:https://juejin.cn/post/7412852276957544485
评论
请登录