您现在的位置是:首页 >技术杂谈 >代码性能优化(保姆级思路)网站首页技术杂谈
代码性能优化(保姆级思路)
代码性能优化(保姆级思路)
对于用户来说对于程序慢是很难忍受的事情,互联网通识1,3,5,8s是公认的体验感知段落,1s响应结果,客户感觉这个好用,3s响应结果,客户认为这个还行能够接受,5s响应结果,客户就会有点反感了,会抱怨怎么这么慢,影响产品形象 ,8s及以上响应结果,这是无法被接受的事情。
我们单位是做电商ERP,每天大概在大客户在30-50w单,所以这样的客户在整个电商ERP的链路中,数据量都是较大,且对于发货有较高的时效要求,所以对于响应结果要求也比较高。
在一段时间产品在搞用户体验提升,找到ERP响应较慢的功能,然后给到研发进行优化。对,各位道友,我就是这个研发,负责和产品同学进行对接。
各位道友可能认为我在水文章,不可能!决定不可能!我主要是在交代事情产生的背景。
接下来都是干货,各位道友准备好。
当产品反馈给你一个功能,说客户反馈的,或实施收集的,或自己测试的。这时不要着急马上就要撸起袖子就干了。
1.首先要明确反馈的结果是否正确,是否可能是用户环境问题。
2.如果在其他环境也出现相同的现象多半是代码层面问题。对于出现问题的功能进行耗时定位,也就是要确认出到底那部分耗时较多。对应手段比较多,比如说skywalking分布式链路追踪,有的同学说不是分布式服务,最简单的,在关键的位置做几个时间戳的输出。
3.明确耗时的代码块后,这时就已经确认原因,根已找到,只不过是使用术的不同。我这提供一些解决的方案思路,供大家思考。
-
代码优化
- 代码结构优化 (老代码,一百人改过,都有自己的想法,调用无用接口)- 异步处理 (举例:页面批量让1000订单,获取物流单号,可以改成后台任务,异步处理,不影响客户体验)
- 串行改成并行 (举例:1000物流单获取单号,可以用5个线程分别获取单号,没有业务冲突)
- 精细锁颗粒度 (举例:没有锁住资源,锁了特别大一个方法)
-
SQL优化
- 索引优化 (常见explain 分析下,根据结果调整,特殊explain 输出结果符合预期,但执行效果不符合,可以使用force_index)
- 大事务优化 (常见:减小事务控制方法)
- 深度分页处理 (常见:分页limit 200条,结果有100w条,会查出100w,截取200条。命中ID索引,根据ID索引值,再查出结果)
- 批量处理 (常见:1.插入10w条,改成批量操作 2.报表查询多个值,使用union一起查出)
-
策略优化
- 分步预处理 (举例:导入excel数据,拆分成1.导入数据解析好 2.解析好数据调用接口导入)
- 空间换时间 (缓存)
4.上面是我通过实际经验总结出的一些思路,绝大部分的性能问题,都能在上面找到解决方法。经过优化后再次来到步骤1,重新开始,知道满意为止。
各位道友,上面心法就是我在工作优化的心得了,我总结为4步3类 10术。
希望各位道友多多提出更多解决方案。
《观天之道,执天之行,尽矣。》