HTTP请求性能分析 - 简单

news2025/1/15 16:38:16

使用随手可得的工具,尽量少的前置要求,来完成任务。

0. 目录

    • 1. 前言
    • 2. 分析工具
      • 2.1 基于Chrome DevTools 的Timing
        • 2.1.1 关于Network标签页下的Timing部分
        • 2.1.2 一些注意项
      • 2.2 基于Curl 命令
    • 3. 剩下的工作

1. 前言

对于业务开发选手而言,一般的功能性需求都不会是问题,所谓的"数据库套壳"操作。

而诸如系统性能,易用性等非功能性需求因为场景的问题,对于一般的业务开发选手而言,往往并没有多少实际的经验。

本文尝试提供一个起点,就是在没有多少性能调优经验时,如何起步 —— 首先从测量开始,毕竟"no measure,no improve"。

  1. 本文的主要受众是初次接触"HTTP请求性能调优"的同学。
  2. 因此这里不会介绍什么基于metrics的分析,相较于整体的理论介绍和实践,我们更关心的是业务场景下的快速解决问题。
  3. HTTP请求性能涉及到从最开始浏览器端发起的请求,中间途径的网络,后端的请求处理,以及最终返回给浏览器这一整条链路,导致问题的原因有很多,我们重点关注如何通过尽量简单的工具和操作,来缩小问题范围、最快地定位出导致问题的主要原因

2. 分析工具

2.1 基于Chrome DevTools 的Timing

这里我们使用截取的一个样例进行示范:
在这里插入图片描述

先说结论: 以上请求响应的性能不及预期,主要瓶颈是在后端服务的处理上(“WATING(TTFB)”),接下来我们需要针对性对后端进行链路段的细化,以确定最终的桎梏点。

2.1.1 关于Network标签页下的Timing部分

在Chrome的DevTools工具中,Network标签页下的Timing部分提供了有关网络请求的详细时间信息。以下是Timing各个字段的解读:

StageExplain
Queueing1. “Queuing”(排队)是指网络请求在等待发送到服务器之前所处的状态。具体来说,当浏览器发送请求时,如果存在排队的请求或者请求队列已满,新的请求将进入"Queuing"状态,等待前面的请求完成或者队列空闲。
2. "Queuing"状态的时间是**"Blocked"时间的一部分**,表示请求在浏览器内核的请求队列中等待的时间。它通常反映了请求在发送给服务器之前由于资源限制而被阻塞的情况,例如并发连接数限制或请求队列已满。
3. 在性能分析中,"Queuing"状态的时间可以帮助您确定是否存在请求排队或请求队列限制的瓶颈。如果看到较长的"Queuing"时间,可能意味着请求队列过长或并发连接数设置过低,导致请求需要等待较长时间才能发送到服务器。您可以尝试优化并发连接数的配置或增加请求队列的容量,以改善请求的性能和响应时间。

注:Blocked时间: 请求发出时,等待在浏览器内核的请求队列中等待的时间(单位:毫秒)。
Stalled1. “Stalled”(阻塞)是指网络请求在等待可用的连接资源时所处的状态。具体来说,当浏览器尝试发起网络请求时,如果没有可用的连接资源(例如,无可用的连接池或达到了最大并发连接数),请求将进入"stalled"状态,并等待可用的连接资源。
2. "stalled"状态的时间是**"Blocked"时间的一部分**,表示请求在浏览器内核的请求队列中等待的时间。它通常反映了资源请求受限于可用连接资源的情况,可能由于网络延迟、连接池限制或其他因素导致。
3. 在分析性能问题时,"stalled"状态的时间可以帮助您确定是否存在连接资源的瓶颈,例如并发连接数设置过低或网络延迟较高等。您可以尝试优化连接资源的配置或调整并发连接数的限制,以改善请求的性能和响应时间。
4. 如果stalled过长,说明获取连接耗时长,如果用的是http/1.1可以升级到http2,合并请求,尽量减少请求数。
DNS Lookup进行DNS解析的时间,即将主机名解析为IP地址的时间(单位:毫秒)
Initial connection建立TCP连接所花费的时间(单位:毫秒)
Proxy negotiation
Request sent发送请求到服务器的时间,包括请求头和请求体的传输时间(单位:毫秒)
ServiceWorker Preparation
Request to ServiceWorker
Waiting (TTFB)1. 关键指标
2. 这是指
从请求发送完毕到接收到服务器返回的第一个字节所经过的时间
,也称为"Time To First Byte"(单位:毫秒)。
3. 它表示了服务器响应的延迟时间,包括了网络延迟和服务器处理时间
4. 如果这一部分慢,说明服务器处理慢
Content Download1. 关键指标
2. 这是指
下载响应内容的时间

3. 它包括了从接收到服务器响应的第一个字节到下载完整响应内容所花费的时间
4. 如果这个值超出预期,说明请求返回的内容很大,或者网络延迟比较明显,或者浏览器当前忙于处理其他任务
Receiving PushHTTP2相关
Reading Push

参考:

  1. Chrom官方文档 - timing-explanation
  2. chrome浏览器中的Timing详解 – 临时找的一篇,但解释得很清楚

2.1.2 一些注意项

  1. 注意Queueing Stage 对于最终请求耗时统计的影响,有的时候在DevTools下看到请求响应慢,可能并不是后端处理慢导致的,而是因为前端发起的请求过多(短时间内远超出"六个"的限制)等其他原因。排查问题的时候方向千万不能错。

如下面这个截图里, 绿色代表请求发出,灰色代表浏览器让该请求处于Blocked状态,还没有真正进入向后端发送(“Request sent”)阶段。
绿色代表请求发出,灰色代表浏览器让该请求处于停止状态

2.2 基于Curl 命令

除了直观地使用chrome devtools之外,另外一个方便使用就是curl命令了。(curl基本属于linux默认安装的命令,另外windows下也有相对应的第三方工具:curl -download)

以下代码我直接借鉴自下方给出的参考链接。为了避免抄袭之嫌,这里我只给出我个人认为需要额外说明的,更多的细节读者可以直接阅读对应的链接。

# 参考: https://www.zhihu.com/question/551074980/answer/3159565281
curl -o /dev/null  -s -w '@curl-w.txt' https://www.zhihu.com

# 其中的 curl-w.txt 为预先创建的, 位于当前目录下:
           DNS解析时长:%{time_namelookup}s\n
           建立TCP时长:%{time_connect}s\n
    请求到服务器响应时长:%{time_pretransfer}s\n
 请求到服务器开始传输时长:%{time_starttransfer}s\n
                总时长:%{time_total}s\n
              上传速度:%{speed_upload} B/s\n
              下载速度:%{speed_download} B/s\n
              
# 以上参数说明: ( 服务器处理耗时 = time_starttransfer - time_pretransfer )
time_namelookup	       DNS 域名解析的耗时
time_connect	       TCP 连接三次握手的时间
time_appconnect	       SSL/SSH 等上层协议建立连接的时间
time_redirect	       所有重定向步骤所用的时间
time_pretransfer	   请求开始到服务器响应的时间
time_starttransfer	   请求开始到第一个字节将要传输的时间(包括预传输时间和服务器处理结果所需的时间)
time_total	           请求总时间

参考:

  1. Chrom官方文档 - timing-explanation

3. 剩下的工作

正如开盘提及的,以上介绍的方法只能用于缩小导致问题原因的范围,比如是前端请求的问题,浏览器限制,亦或是网络问题,还是后端处理慢的问题等。

当问题被缩小后,我们还需要针对性地结合链路追踪或者补充日志记录,以及经验判断,来最终定位问题。

虽然本文里列举的方法无法帮助你最终定位问题,但因为其简单、便捷、学习门槛低的特性,可以显著降低你在面临问题时候的焦虑感,面对问题时候有所依凭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/869574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云服务器搭建Magento电子商务网站图文教程

本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程,Magento是一款开源电商网站框架,其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发,支持版本范围从PHP 5.6到PHP 7.1,并使…

建设全球研发中心城市,长沙的“破”与“立”

文 | 智能相对论 作者 | 范柔丝 顺应全球科技革命和产业变革浪潮,响应国家和全省发展战略,向全球研发中心城市见可而进的长沙,落地动作不断。 省委书记沈晓明在2023互联网岳麓峰会上前瞻性地为长沙擘画“全球研发中心城市”的蓝图后&#…

每期一个小窍门: go 的小接口多组合思想

go中的接口更加灵活 通过隐式约定实现 类似奥卡姆剃刀 尽量把小功能抽象成为一个独立接口复杂接口最好由简单子功能接口组合而来传参如无必要, 勿扩大接口范围, 保持简单

AI绘画(2)stable diffusion绘制人像

使用AI绘画,看起来很简单,但要画好就很难,又是另一回事。使用AI绘画,是有着技巧和窍门。 现在,我们开始stable diffusion的一个心得分享。今天教程的主题是画人物。 由于是stable diffusion的输入文本是英文&#xff…

GB/T28181设备接入端如何应用到数字城管场景?

什么是数字城管? 数字城管,又称“数字化城市管理”或“智慧城管”,是一种采用信息化手段和移动通信技术来处理、分析和管理整个城市的所有城管部件和城管事件信息,促进城市管理现代化的信息化措施。 数字城管通过建立城市管理信息…

Ubantu安装Docker(完整详细)

先在官网上查看对应的版本:官网 然后根据官方文档一步一步跟着操作即可 必要准备 要成功安装Docker Desktop,必须: 满足系统要求 拥有64位版本的Ubuntu Jammy Jellyfish 22.04(LTS)或Ubuntu Impish Indri 21.10。 Docker Deskto…

无涯教程-Perl - pos函数

描述 此函数用于查找最后匹配的子字符串的偏移量或位置。如果指定了SCALAR,它将返回该标量变量上最后一个匹配项的偏移量。 您还可以为此函数分配一个值(例如pos($foo) 20;),以更改下一个匹配操作的起点。 偏移是从第零位置开始的计数器。 语法 以下是此函数的简单语法- …

百度网盘非会员倍速播放(电脑端)

百度网盘非会员倍速播放(电脑端) 1. 打开edge浏览器,点击右上角的三个点后,选择“扩展” 2. 选择“管理扩展” 3. 选择“获取MicrosoftEdge扩展” 4. 搜索“Global Speed” 5. 选择Global Speed:视频速度控制,然…

STM32 LL库+STM32CubeMX--LED呼吸灯

一、前期准备 硬件:STM32F103C8T6开发板调试工具:DAPLink(本次使用)或USB-TTL开发环境:STM32CubeMX、Keil、Vscode(可选)LED:使用PA0(TIM2_CH1)输出PWM,LED的阴极接GND 二、使用定时器中断产生PWM STM32F103C8T6在72…

各地区-各行业法人单位、区划数63个指标(2010-2022年)

一、数据介绍 数据名称:各地区-各行业法人单位、区划数63个指标 数据年份:2010-2022年(法人单位至2021年) 数据样本:404条 数据来源:自我整理 二、指标说明 行政区划代码 地区 长江经济带 经度 纬…

数字化时代,选择商业智能BI解决80%数据问题

数据是需要有人来照料、培养的,如果企业没有完善的数据治理方案,就很难保障数据的质量,进而导致数据无法利用,让这些辛苦积累的数据失去了价值。 数据治理目标 数据从业务活动中产生,也会深刻影响到业务本身。 对于…

vue2中使用mixins(混入)和vue3中使用composable

文章目录 一、mixins混入1、 新建mixins文件夹,新建myMixins.js2、myMixins.js 文件3、index.vue 文件(要使用的文件) mixins 总结二、composable(组合式api composition )1、 新建composables文件夹,新建useEdit.js2、useEdit.js…

python无聊小创作:直播读弹幕机器人(附完整代码)

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 直播读弹幕机器人是指能够实时读取直播平台上观众发送的弹幕,并将其转化为语音进行播放的机器人。 这种机器人通常会使用文字转语音技术,将接收到的弹幕文本转为语音,并通过扬声器或…

系统架构设计专业技能 · 网络规划与设计(三)【系统架构设计师】

系列文章目录 系统架构设计专业技能 网络规划与设计(三)【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计(四)【系统架构设计师】 系统架构设计高级技能 软件架构设计(一)【系统架构设计师…

腾讯云标准型CVM云服务器详细介绍

腾讯云CVM服务器标准型实例的各项性能参数平衡,标准型云服务器适用于大多数常规业务,例如:web网站及中间件等,常见的标准型云服务器有CVM标准型S5、S6、SA3、SR1、S5se等规格,腾讯云服务器网来详细说下云服务器CVM标准…

Vue中使用Tailwind css

1.什么是Tailwind 就是一个CSS框架,和你知道的bootstrap,element ui,Antd,bulma。一样。将一些css样式封装好,用来加速我们开发的一个工具。 Tailwind解释 tailwind css 中文文档 2.Vue使用Tailwind配置 1. 新建vu…

【elasticSearch系】3.完整搭建详尽版elk

话不多说,我们先看下经典的elk 是由哪些组件搭建组合起来的 elasticsearch和kibana搭建 可以查看之前我们搭建elasticsearch和kibana 的这篇文章 logstash搭建 为了和之前我们搭建elasticsearch和kibana版本保持一致,这里我们还是选择7.17.3 下载地址 点击下载,这里为了…

Spring Boot配置文件中的配置项加密jasypt使用

在Spring Boot中,有很多口令需要加密,如数据库连接密码、访问第三方接口的Token等。常见的方法就是用jasypt对口令进行加密。 实际上,jasypt可以对配置文件中任意配置项的值进行加密,不局限于对密码的加密。 1.在pom.xml中添加ja…

由于找不到vcruntime140.dll,无法继续执行代码,三种修复方法

为什么我们很多人都遇到过打开电脑软件时候突然电脑就提示找不到vcruntime140.dll,或许vcruntime140.dll丢失,那么vcruntime140.dll到底是什么?为什么会丢失,丢失了要怎么解决修复呢?下面小编都会一一介绍给大家&#…

常见直播流协议,你学“废”了吗?

常见的直播流协议(大汇总) 前言正文什么是视频流协议?协议、编解码器和容器格式 RTMP什么是RTMP?RTMP的特性RTMP的三个主要成分使用RTMP直播的整个流程RTMP拉流过程RTMP是否被淘汰了?RTMP的几个变种 HLS什么是HLS&…