本文主要记录工作中的一次性能优化,主要从数据库,Java代码层,以及前端返回数据三个方面进行优化,响应时间从2.2秒左右提升到1.1~1.2秒。
1、数据库方面
由于数据库中数据量较大并且使用到的表较多,有些数据量较大的查询速度明显增加,而且由于表数量多、基数大,尽管每次查询速度不慢,但还是会增加总体的响应时间。
1. 数据的查询顺序
数据查询的过程中发现有些查询的结果集很大但是并没有用到,考虑后可以从两个方面进行优化,这两个方面其实都是通过减少查询的结果集从而减少响应时间。
将可以大范围缩小数据的结果集提前
将结果集中有可以作为后续查询条件的提前
2. 增加缓存
数据查询过程中有几张表的变动几率很小或者根本就不会改变,这种情况下就不需要每次都查询,可以将其添加到缓存中。只有第一次访问的时候加载,后续将不再请求数据库直接访问缓存数据,可以显著减少响应时间。
将变动很小的表或者根本不会改变的表添加到缓存中
3. 减少查询结果集
数据查询的结果集中有很多是不需要的信息,将不需要的查询结果去除掉,从而减少响应时间。也就是说不返回不需要的字段,不要返回全部的字段。
4. 数据库操作的优化
这边主要是操作层的优化,数据库优化可以参考我的另一篇博文。
2、Java代码
1. 减少使用双层for循环,避免出现三层for循环
虽然说现代计算机的运行速度已经很快了,但是还是尽量少用或者不用双层for循环,不过三层for循环是一定不能出现的。
一般情况下的双层循环for循环都可以通过创建合适的数据结构通过两次一层for循环从而避免双层for循环。可以从我的另一篇博文获取一些灵感。
2. 异常处理以及第三方API请求时间限制
数据操作的过程中调用到了第三方的API接口,虽然说一般情况下都没问题,但还是有几率出现请求超时的情况。所以对这个请求进行了异常处理和请求时间限制,避免请求超时时响应时间过长的问题。
3. 代码的封装提取
有些代码可以封装成一个方法的就提取出来封装成一个方法,虽然不会有效减少响应时间,但是代码更加整洁,也方便后期管理。
3、前端返回
1. 分页返回
使用分页返回数据,主要是减少数据传输量,减少由于带宽造成的时间浪费。