首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >优化记录

优化记录

作者头像
名字是乱打的
发布2021-12-23 18:00:45
发布2021-12-23 18:00:45
2680
举报
文章被收录于专栏:软件工程软件工程

1.记一次接口优化

背景介绍

我们部门有个核心业务是资讯相关业务 资讯分为三个流程每个流程包含若干功能点

  • 撰写(新增,保存,提审,删除)
  • 审核(退回,保存,发布,发布并推送)
  • 发布(退回,保存,更新,再发布)

三个流程提供十多个功能点,每个功能点还包含有其他的流程,比如有些流程涉及调用外部AI接口进行关键词计算,同步到MQ进行消息推送,以及附件处理,文章关系处理等等.

恐怖的事情发生了

这么多功能点和流程竟然浓缩到了一个接口里面!!! 这就搞的整个流程代码大概一千五百多行,流程之间非常不清晰,大家也都只敢往里面加代码,不敢去除代码...久而久之这个接口流程就变得非常非常慢了,平均请求时间甚至达到了5秒,遇到特殊时候甚至会达到20秒

解决

发生了20多秒的请求后老板就忍无可忍了,发话让改了

直接说一下解决方案吧

  • 1.尽量减少sql查询次数
  • 2.优化数据结构 ---------某些可能用两次for循环遍历操作的,可以改变下数据结构,比如查了资讯列表和作者列表,赋值资讯里的作者名,可以变换为map(资讯id,资讯dto)形式 eg:res是List<SecuritiesInfoSearchRespVo>,变成已uniqueCode为key其实体为value的map
代码语言:javascript
复制
res.stream().collect(Collectors.toMap(SecuritiesInfoSearchRespVo::getUniqueCode, Function.identity()));
  • 3.异步处理耗时操作-----部分时效不要求那么高,操作耗时又严重的可以提到异步任务里,比如我们这里的计算关键词要求传入正文给AI,然后AI返回相关的关键词,整个流程要1~2秒,这样的其实提到异步里就非常好,我们这里采用的是协程,用的就非常舒服
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/2/3 上午,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 恐怖的事情发生了
  • 解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档