问题 :如何解决网页响应慢,waiting(TTFB)时间过长,接口返回耗时等问题?

首先需要了解什么是Waiting (TTFB) 时间?TTFB 是Time to First Byte 的缩写,指的是浏览器开始收到服务器响应

数据的时间(后台处理时间+重定向时间),是反映服务端响应速度的重要指标。如下图waiting(TTFB)平均在5.5s左右,

正常情况下要求接口返回200ms,那么耗时太长的就需要进行排查及优化了。

 

 

 

排查:经定位发现接口的业务逻辑中有三个for循环对结果数据进行解析处理,第一层for循环遍历60次,第二层for

循环遍历1次,第三层for循环遍历10次(查询数据库),伪代码如下:

for(60){
    for(1){
       for(10){
          dao.xx();
       }  
    }
}

按照上图所示遍历,大概一次接口调用,就需要访问600次数据库,这显然开销太大了。

 

解决方法:对dao.xx()的调用顺序进行调整,优化为在for(60){}前面进行数据库查询逻辑。然后在

第三层 for循环里面改为从前面的结果数据中获取,经测试验证此番优化后接口Waiting (TTFB) 

时间基本在90ms-180ms左右,优化伪代码如下:

Object resut = dao.xx();
for(60){
    for(1){
       for(10){
          //使用resut 
       }  
    }
}

 

总结:应尽量减少在循环里面调用数据库,因为随着系统业务发展,需要查询的东西可能变多,for循环的次数随着增

加,就导致接口非常耗时。同样的,当存在批量新增的时候,不要在for循环里面调用单个新增的方法,而是应该使用

批量新增。

 

 

 

 

posted on 2022-03-09 11:14  半纸情书  阅读(952)  评论(0编辑  收藏  举报