小猿日记(8) - 接口优化从13秒到3秒,我做了什么

简介: 接口从13秒被优化到3秒,我做了什么,本篇文章为您揭晓

口水记

由于以前的一些债务,某些接口是越来越慢,越来越慢。

最近做了一个新需求,其中有个接口的时间需要13秒。其实最开始是需要20多秒,后面优化了一下,就到13秒了。

但是13秒,这能忍嘛。尽管这个接口只有在用户第一次使用才会请求到(涉及到三个系统),但也忍不了啊,直接劝退一波不忠实用户。

只能是想办法,而且必须想办法。

首先想到的是把一些循环查询去掉。

说干就干,先去看看三个系统的链路,究竟是哪个系统耗时比较久。

结果,其中最底层的系统花费了11秒,那结果稳了呀,把那个11秒优化了,不就ok。

继续往下看,方法中只能通过打日志来看了,究竟是哪个方法,哪行代码耗时。

涉及到9个方法,每个方法耗时1秒多点,这就很难办了,没有明显的短板了。

不方,找一个方法看代码,发现有的方法中有一些遍历,是在循环中去查询数据库,这就有一些办法了。

这里的循环内查询还有点悬机,那就是循环内的查询,是循环对象中json字符串中的某个key的value,虽然处理起来麻烦一点,但最后还是处理好了,空间换时间嘛,总归要处理的。

很快,优化完毕,结果并不理想,差不多优化了2秒左右,还需要8-9秒的时间。

代码中是没有可以优化的点了,因为都是删除、插入、修改,查询都没有,缓存自然不用去想了。

此时想到了另外一点,异步。

因为之前在另外一次优化中有用到异步,一个方法,有调用三个不同外部服务,且顺序并不相关,所以使用了异步,瞬间那个接口便优化了50%以上,结果甚好(注意,异步一定要注意不要翻车,一定先评估好影响,能否异步)。

但是在此次方案中,效果却并不行,由于至少有6个步骤依赖于前面的方法的处理结果,所以无法异步,或者单独把某一两个方法异步,其实意义并不大。

那么又从哪方面入手,此时,我想到了预热。

因为这是一些数据的准备,是对于一些用户的数据初始化,那么,完全可以假设用户已经存在了,把这些数据先准备好,用户来了,直接修改关联关系即可。

说干就干。理论可行,结果也很理想,这里的11秒优化到不到1秒,总体的时间不需要3秒。

至于3秒还能不能优化,我的回答是肯定可以的,但是没必要,这里的3秒你可以理解为一个用户注册的等待数据初始化的时间(一个用户只会有一次这个接口的请求)。

从用户可接受度,以及产品的发展过程、团队角度来说,并没有必要。

用户现在对于3秒注册,接受度很高。其次,产品的重心,目前依然是业务的迭代,所以,团队的重心依然是在业务上。

3秒到1秒的优化,这里的时间成本比前面13秒到3秒的成本甚至还要高,但是起到的团队/公司收益,却不及前面的一成。

要不要做优化,什么时候去做优化,这是一门学问,自己也还有很多要学的。

小结

本次优化的目的是为了提升体验

所以从减少时间入手,找到瓶颈,先解决瓶颈,再去优化边边角角

本次优化并没有去优化边角,只是将瓶颈进行了优化,便完全达到了预期,而且该接口后续的优化,暂时是没有时间去进行,因为还有更多紧急的任务在排着。

不正经语录

  • 接口多久算慢,优化到多久算快,不要一概而论
  • 不同的优化有不同的目的,目的不同,优化过程也可能不同

声明

本文故事纯属遐想,如有雷同,我是原创。

欢迎转载。
转载请务必注明以下信息。
原作者:谙忆
原文地址:https://copyfuture.com/blogs-details/20200525215110993ktknwg449hzc2re

公众号

更多精彩内容、活动、程序猿的小故事,欢迎扫码关注公众号
程序编程之旅

目录
相关文章
|
1月前
|
机器学习/深度学习 算法 数据可视化
2024美赛C题保姆级分析完整思路代码数据教学
2024美赛C题保姆级分析完整思路代码数据教学
27 0
|
8月前
2020考研公共课_基础精讲课_管理类联考综合能力 联考逻辑(读书笔记)
2020考研公共课_基础精讲课_管理类联考综合能力 联考逻辑(读书笔记)
|
7月前
|
机器学习/深度学习 传感器 安全
2023年高教杯A题定日镜场的优化设计思路及参考代码(持续更新)
2023年高教杯A题定日镜场的优化设计思路及参考代码(持续更新)
|
10月前
|
存储 编译器
IAT表入门简析【滴水逆向三期52笔记】
IAT表入门简析【滴水逆向三期52笔记】
农场养成种树游戏开发逻辑源码解析
开发一个农场养成种树游戏可以为玩家提供种植和养护树木的体验,同时也可以学习有关农业和环境保护的知识。 以下是一个简单的农场养成种树游戏的开发源码demo,供参考:
|
10月前
|
Rust 安全
Jogger跑鞋零撸项目系统开发/方案详细/规则玩法/源码案例/功能说明
At present, multi blockchain smart contract compatibility technology mainly includes two ways: one is to implement cross chain smart contracts, which is to apply smart contracts to cross chain scenarios; Another approach is to use converters to convert smart contracts from one programming language
|
10月前
|
区块链 开发者
Jogger慢跑者跑鞋零撸模式系统开发详细规则/逻辑分析/案例详情/项目方案/源码部署
  DApp是指以区块链为底层技术平台的分布式应用程序,它使得开发者可以构建去中心化和自主运行的应用程序,并通过链上的合约机制实现代码不可更改性和事务透明性。
|
11月前
|
前端开发 JavaScript NoSQL
SpringBoot日记本系统全程直播05:把日记新增功能搞出来撒~
SpringBoot日记本系统全程直播05:把日记新增功能搞出来撒~
课外闲谈8.通用数据类的案例
课外闲谈8.通用数据类的案例
41 0
课外闲谈8.通用数据类的案例
|
编译器 C++
类的入门<C++入门>(跑路人笔记)(2)
类的入门<C++入门>(跑路人笔记)
类的入门<C++入门>(跑路人笔记)(2)