最近公司要求在系统中的所有接口响应时间必须低于500ms,第一次处理这种任务,也没啥经验,只能无脑干了,干完后,总结一下本人处理的过程:
接口大部分慢的原因有以下几点:
1.索引未添加或者添加了索引没用生效
2.SQL语句写得过于垃圾
3.代码逻辑的先后顺序执行有问题
4.代码中采用了很多循环CURD
5.对于处理时间长的接口未才有最好的方案解决
6.代码没写好,采用了速度慢的方法进行处理
7.系统中有调用其他第3方接口,第3方接口响应慢
针对以上问题,我们给出了处理方法
1.第一个和第二个问题,我们可以在mybatis的配置文件中增加拦截器,将其接口中执行的sql语句所耗费的时间打印在控制台上,然后找到耗时长的sql,对其进行优化,具体的sql优化方法就不多说了,自己可以百度一下
第3个问题,针对那些代码中的逻辑,只限制于不需要回滚的代码,要是几个方法没有依赖关系,我们可以采用多线程处理,最好是自己写一个多线程处理的类,封装起来,不过多线程处理对服务器的资源有要求,所以线程的初始化要结合服务器的资源来定
第4个问题就很简单了,能批量处理的尽量改成批量处理,数据量不大的话可以采用缓存一次把全部查出来,然后在从缓存中获取
第5个问题,对于处理时间长的,比如下载文件,上传文件啊,我们可以采用异步的方式实现,当然具体怎么异步,我们有2个解决方法,一个异步是直接返回结果,然后处理完成后将下载链接显示在一个专门下载的页面里面,让用户去这个页面下载,第2种的话,前端可以做一个等待的图标,请求服务器后,服务器返回一个轮询的等待时间,前端后面根据这个时间每隔多久去查询一次
第6个问题,则需要我们对代码的编写有一定的基础了,比如,SET集合中匹配一个元素的速度是要远远大于List中匹配的,jdk8的多线程循环处理是比基本的for循环快的(和数据量有关),并且采用了多线程,集合也必须改为线程安全的集合
第7个问题,这个就只能和第3方的人说了,让他们优化,毕竟不是我们自己的,代码改不了咯