问题 :如何解决网页响应慢,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循环里面调用单个新增的方法,而是应该使用

批量新增。

搜索

复制

样例1-http接口的waiting(TTFB)时间从5.5s优化为100ms的更多相关文章

  1. Waiting (TTFB) 时间

    什么是 Waiting (TTFB) 时间 TTFB 是 Time to First Byte 的缩写,指的是浏览器开始收到服务器响应数据的时间(后台处理时间+重定向时间),是反映服务端响应速度的重要 ...

  2. waiting TTFB 时间优化

    百度百科解释:获取在接收到响应的首字节前花费的毫秒数. 根据chrome浏览器,具体请求链接的这个时间,对反应慢的页面进行优化.

  3. Java线程演示样例 - 继承Thread类和实现Runnable接口

    进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...

  4. 优化vue+springboot项目页面响应时间:waiting(TTFB) 及content Download

    优化vue+springboot项目页面响应时间:waiting(TTFB) 及content Download TTFB全称Time To First Byte,是指网络请求被发起到从服务器接收到地 ...

  5. RESTful设计原则和样例(开发前后台接口)

    摘要 REST(表征性状态传输)设计风格;REST通常基于使用HTTP,URI协议和标准.使用URL标识资源,开发前后台接口.主要使用post,get方式 参考博文: http://www.cnblo ...

  6. 【gRPC】C++异步服务端优化版,多服务接口样例

    官方的C++异步服务端API样例可读性并不好,理解起来非常的费劲,各种状态机也并不明了,整个运行过程也容易读不懂,因此此处参考网上的博客进行了重写,以求顺利读懂. C++异步服务端实例,详细注释版 g ...

  7. 在.Net MVC结构API接口中推断http头信息实现公共的权限验证过滤器演示样例

    //control   action public class TestController : ApiController { [MyAuthFilter] public string test(s ...

  8. JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

    什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...

  9. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  10. 使用ffmpeg实现转码样例(代码实现)

    分类: C/C++ 使用ffmpeg实现转码样例(代码实现) 使用ffmpeg转码主要工作如下: Demux -> Decoding -> Encoding -> Muxing 其中 ...

随机推荐

  1. 每日一抄 Go语言等待组

    package main import ( "fmt" "net/http" "sync" ) /* Go语言除了可以使用通道(channe ...

  2. 【SQL Server】numeric——精确数字的数据类型

    NUMERIC数据类型是一种精确数字数据类型. numeric是标准sql的数据类型,格式是numeric(m,n).最多精确位数为38位,其中m表示总位数,n表示保留的小数点位数. 参数 含义 默认 ...

  3. 版图 shrink

    先打开模拟部分的版图,然后在ciw 里面执行 dbCreateXFormPCell(geGetEditCellView() "libName") 然后在"libName& ...

  4. WebService接口实际场景应用(一)

    背景:要求写一套接口测试工具.过程中遇到了WebService接口的问题,遂写下本篇文章. 阶段问题1: 需要利用数据驱动,然后读取excel中的数据并直接调用.但是webService接口与http ...

  5. 分布式接口幂等性、分布式限流:Guava 、nginx和lua限流

    接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用. 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此 ...

  6. 【python】第一模块 步骤五 第二课、Python多线程

    第二课.Python多线程 一.课程介绍 1.1 课程概要 章节概要 进程.线程与并发 对多核的利用 实现一个线程 线程之间的通信 线程的调度和优化 1.2 为什么要学习多线程 (线程)使用场景 快速 ...

  7. @media移动PC端fontSize响应设置

    @media only screen and (min-width: 320px) and (max-width: 359px) { html, body { font-size: 8.51px; } ...

  8. Verilog 预编译

    Verilog 预编译 Verilog 语言支持宏定义(`define),参数 parameter,局域参数(localparam)以及`include等内容.这些数据常量的支持极大方便数字系统设计. ...

  9. Synchronized和Lock有什么区别?用Lock有什么好处?

    Synchronized 和 Lock 1.原始构成 Synchronized 是关键字属于JVM层面 (代码中以蓝色字体呈现) monitorenter .monitorexit Lock 是具体类 ...

  10. java15配置环境后java_version无反应(不显示“不是内部或外部命令”)

    重新装了jdk15来使用eclipse 配置完环境变量之后打开cmd输入 java -version 好家伙,居然一点反映都没有, 然后傻乎乎的跑回去重新配置JAVA_HOME和path 还是没用,细 ...