当前位置: 首页 > news >正文

接口优化方案

前言

最近随着国产化热潮,公司的用于营业的电脑全部从windows更换成了某国产化电脑,换成国产化之后,我们系统的前台web界面也由之前的jsp页面重构成vue.所以之前的一体式架构也变成了前后端分离的架构。但是在更换过程后,发现一些接口耗时相当长。虽然之前可能也不快,但是之前都是前后台在一起的,耗时长也没关系,多等一会儿就显示出来了,但是由于接入服务网关,服务网关请求后有超时时间限制,所以不得不优化了。

排查思路:

排查前先看下未优化时调用的耗时情况。

image.png

1、先确定程序慢在了哪里?

使用arthas工具跟踪接口,如下:

image.png

从上图可以看出,耗时主要发生在civilPrint()这个方法上,
继续跟踪civilPrint方法

image.png

image.png
下面还有很多行这样类似的代码,就不贴出来了。

从上图可以看出耗时很大程度是由嵌套循环引起的,然后一些频繁的get,set方法累积起来导致耗时贼长。

2、根据业务分析是否可以从业务逻辑上优化。

从上面可以看出嵌套循环是引起耗时的主要原因,那么需要从业务层面来分析一下,看了代码之后发现,嵌套的原因是:
用户通过查询数据库,获取到关联的所有用户,然后遍历用户,查询每个用户的其他信息。然后将这些信息放到List中做为出参供前台使用。业务看起来很简单,但是貌似也不能改变这种逻辑。

3、如果不能从业务逻辑上优化,那就要考虑从代码角度优化了。
既然从业务的角度不能优化,那么就要从代码层面来尝试解决了。

image.png

image.png

还有类似这种的让人看了头大的,一个方法中出现了还不止一次。

image.png

这些其实都是引起业务慢接口耗时长的一些原因。但是将这些写法优化后,还是不太理想,由于是嵌套循环,最后还是考虑使用多线程来优化,用户查询出的结果,放到线程中去处理,然后各自将处理结果放到集合中,主线程等待所有线程处理完毕之后,再进行下一步。这样耗时就会大大缩短。
优化后的关键代码如下:

image.png

这里要注意下锁的释放,一定要放到finally中去处理,否则一旦报错导致程序执行失败,线程就会一直处于等待状态。

image.png

最后看下优化后的效果:

image.png

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第13天,点击查看活动详情

http://www.lryc.cn/news/61248.html

相关文章:

  • 《商用密码应用与安全性评估》第二章政策法规2.1网络空间安全形式与商业密码工作
  • C#实现将文件、文件夹压缩为压缩包
  • 程序员跳槽,要求涨薪50%过分吗?
  • Java核心技术 卷1-总结-10
  • React Props
  • 【Hello Network】协议
  • 零项目零科研,本科排名倒数,一战上岸上海交大电子与通信工程
  • NOIP模拟赛 T3区间
  • 【Python】如何用pyth做游戏脚本(太简单了吧)
  • 【Linux】磁盘与文件系统
  • Transformer中的注意力机制及代码
  • ChatGPT在连续追问下对多线程和双重检查锁模式的理解--已经超越中级程序员
  • 每天一道大厂SQL题【Day22】华泰证券真题实战(四)
  • 【智能电网】智能电网中针对DOS和FDIA的弹性分布式EMA(Matlab代码实现)
  • IDEA 创建微服务项目实例
  • 注册苹果开发者账号的方法
  • OpenCV2 计算机视觉应用编程秘籍:1~5
  • Domino自带的JSON校验工具
  • CentOS(linux)使用Docker安装nacos
  • 无线测温在线监测系统工作原理与产品选型
  • Nginx rewrite ——重写跳转
  • 【华为OD机试真题 C++】1038 - 全量和已占用字符集 | 机试题+算法思路+考点+代码解析
  • 网络中的网关和物联网的网关区别 局域网 路由器 交换机 服务器
  • 2023 年嵌入式世界的3 大趋势分析
  • 基于 DolphinDB 机器学习的出租车行程时间预测
  • Python调用最小二乘法
  • 15.数据表格.上
  • 在poetry虚拟环境下打包exe
  • 【Unity VR开发】结合VRTK4.0:高亮与标签
  • 有了MySQL,为什么还要有NoSQL