业务背景
在桂林XXX人民法院项目的XX法院三维模型应用开发中用户反馈模型加载慢的问题,要想优化该问题主要从两方面入手
- 硬件升级
- 软件优化
硬件升级
可参考高院三维模型的超高分电脑配置
处理器:Hygon C86 3285 8-orecprocessor 3.00GHz(2个处理器)
RAM:32GB
显卡:NVIDIA Quadro RTX 4000
显示器:AVCIT2K
- 桌面分辨率 1920 x 1080
- 有源信号分辨率 1920 *1080
- 刷新频率(Hz) 60 Hz
- 位深度 8位
- 颜色格式 RGB
- 颜色空间 标准动态范围(SDR)
软件优化
VR缓存升级
联系VR负责的同事获取VR应有的缓存升级方案以及相关资源
问题排查
在VR缓存升级后加载模型已经得到了很大一部分的改善,不过依然加载打点信息慢的问题,模型加载到点位处理要大概需要二三十秒
通过排查,是在模型网页渲染加载的过程中,底图会向向ivr请求加载模型数据以及点位坐标数据和部分物料,物料加载好后会向业务组件提供的接口发起请求加载展示的业务数据
网页的请求是异步的,但是数量有上限的,不同浏览器,不同http协议版本允许的网络请求资源数是不一样的,不过总的来说在2-8个之间。底图中也是异步进行了好几个接口的请求,是可能会造成请求列队阻塞的
在下面现场的两张图中,getVisitorData的接口(业务组件)请求在findModelResource.do(ivr请求点位资源接口)之前
并且该接口请求花费居然高达25s
接口优化
首先需要排查该接口慢的原因,进到该接口里查看代码逻辑,主要逻辑是从acs接口获门禁事件信息,进入接口调用逻辑很快就找到问题主要耗时所在
之前开发的同事把pageSize设定为5的分页查询特定时间上的门禁事件,导致循环请求多次acs的接口,增加pageSize的值,减少请求的次数
再继续排查耗时多的操作,发现调取acs的取数据接口要调两次,一次是取今天的,一次是取昨天的进行计算增长率
两次请求之间没有强关联的关系,所以这里可以改成使用CompletableFuture异步请求的方式进行数据获取
优化后该接口的响应速度得到提升
数据量限制
修改了接口之后在现场调试过程中遇到了影响三维模型加载速度慢的特殊情况,在三维模型运行的上午加载速度还是正常的,无卡顿的现象,但是到了下午每次加载就可以卡顿起来
经过排查发现实际上是当天是进行模型报警测试,人脸报警的阈值设置为0%,导致当天的人脸抓拍都当做了人脸报警事件,到下午后一天有四千多条事件记录,因为一个人脸报警里包含有一张人脸抓拍图和一张原图,四千多条人脸报警相当于要加载八千多张人脸图片,导致浏览器在渲染过程极度卡顿。
一般情况下不会出现一天四千多条告警数据的极端情况,但是展示那么多告警信息于用户而言大部分是无用的,可去事件检索里宿舍不会在数据看板上一条条的看,所以限制数据看板上展示最新的100条告警数据即可