问题 :如何解决网页响应慢,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. java8 stream流的使用

    List<Paper> list = new ArrayList<>();list.add(new Paper("m",2L));list.add(new ...

  2. PAT-basic-1023 组个最小数 java

    一.题目 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...

  3. 一、Java简单概述

    一 . Java组成部分 JDK : java development kit (Java开发工具) JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也 包括了JRE. 所以安装了 ...

  4. laravel 插件库网站

    1.https://packagist.org 2.http://packalyst.com

  5. 5G智慧灯杆系统在智慧街区的应用

    智慧化的路灯作为一个高度集成的项目,是智慧城市在城市公共空间的落地载体,是一个自上而下的体系,有外延.可扩展.能适配智慧城市的建设要求.在商业街开展智慧灯杆建设,同期开展5G应用技术试点,有利于商业街 ...

  6. RabbitMQ宕机了怎么办?

    RabbiMQ宕机会导致消息丢失! 解决办法:可以做消息持久化. 非持久化消息:只有非持久化消息在RabbitMQ宕机时会发生消息丢失. 持久化消息:持久化的消息会在接收后被保存到磁盘中,所以Rabb ...

  7. AD9834配置

    SPI设置 注意,虽然手册上CPOL(CLK空闲时电平)为低,但实测是是高电平 连接 SYNC 为片选引脚,使用时拉低 FSE/PSE为频率与相位寄存器选择,均拉低即可 void SPI_Write_ ...

  8. 【python】绘图坐标轴标题中包含上标或下标

    plt.ylabel("流量($\mathregular{m^3}$/s)")          #绘图坐标轴添加上标$\mathregular{m^3}$,若是下标m_3 不加m ...

  9. webpack打包分析webpack-bundle-analyzer 打包文件分析工具

    最近需要减少项目打包后的文件(bundle)的大小,那么首先需要了解bundle的构成. 目前我已知的方法有两种: 利用webpack-bundle-analyzer插件 利用webpack官方提供的 ...

  10. SQL教程

    SQL教程 SQL简介 SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS). SQL 的范围包括数据插入.查询.更新和删除,数据 ...