问题 :如何解决网页响应慢,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. python实现图片转PDF

    import os from PIL import Image from reportlab.pdfgen import canvas def image_resize(img, width, hei ...

  2. 新版 Mediasoup Windows 安装 编译

    https://vc.feiyefeihua.top/ ps:视频测试demo,服务器配置很低,加载有点慢:需要有音视频设备,不然会报错. 关于官网文档 官网文档地址 只测试了 Windows .讲的 ...

  3. 2022-04-21内部群每日三题-清辉PMP

    1.项目经理正在对比项目预算与行业指数,项目经理注意到项目总预算低于类似项目的估算.项目经理应该怎么做? A.更新风险登记册 B.调节资金限制 C.执行储备分析 D.请求专家判断 2.一个项目正在实施 ...

  4. mybatis查询sql时,在不分页的情况下,自动加了limit导致接口报错

    今天在开发过程中,我遇到了很奇怪的问题.自己写的代码明明没有分页进行查询,但是打印出来的sql缺有limit 导致我getone的时候,出现了二个limit,导致接口报错. ### Cause: or ...

  5. Windows本地文件上传到Linux服务器(腾讯云)

    环境 本地 操作系统:Window 10 企业版LTSC;内存:8GB;操作类型:64位. 服务器 CentOS 8(1核2GB,1Mbps) 64位 ,已安装Docker(CentOS 8 的doc ...

  6. vim ctrl+s 不能再操作

    vim下编写代码不自觉按到Ctrl+S,此时vim就不能再操作了.发现vim下Ctrl+S是阻止之后的输入,可通过Ctrl+Q来解除.

  7. 一步一步教你FasterRunner在Centos7服务器部署

    一,搭建环境的安装版本 centos ,mysql-5.7.22,node-v9.8.0,Python-3.6.2(注意mysql版本,因为django需要跟mysql兼容) 二,linux 环境的搭 ...

  8. 数据结构(C语言)_链表

    //单链表按序号查找节点的值 LNode* GetElem(LinkList L, int i) { int j = 1; LNode* p = L->next; if (i == 0) ret ...

  9. 【python】类的学习

    https://www.bilibili.com/video/av69455439?from=search&seid=406401960648305052 https://zhuanlan.z ...

  10. find_in_set使用:匹配按逗号分隔后的内容

    SELECT  * FROM `tb_test` WHERE c_id ='123' AND create_time LIKE '2021-06-03%'  AND find_in_set('A362 ...