有没有办法调试 chrome 请求排队的原因?

2023-12-29

背景:Chrome 有一个请求队列。在某些情况下,它会对可延迟的请求进行排队。但我发现很难确定哪些请求导致请求排队。

我的问题是:我们有办法深入了解排队问题的根本原因吗?

源代码 https://chromium.googlesource.com/chromium/src/+/refs/tags/74.0.3693.6/services/network/resource_scheduler.cc#388

镀铬文档 https://developer.chrome.com/docs/devtools/network/reference/#timing


HTTP/1.1 与 HTTP/2

对于HTTP/2排队有不同的含义和分析。阅读这篇精彩的文章队头阻塞 (HOLB) https://engineering.salesforce.com/the-full-picture-on-http-2-and-hol-blocking-7f964b34d205/.

这是我的分析 https://stackoverflow.com/a/52770802/2834978使用 Wireshark 进行 TTFB 计时,这可以作为调试工作的补充。

HTTP/2

HOLB 可能有 2 个原因:HTTP 和 TCP。请求阻塞仍然可能发生(可能是由于 TCP 原因)。

拥有页面/站点的 HAR 文件,使用以下命令查找条目.blocked > 50 over timings(请阅读下面的HTTP/1.1分析)

    "timings": {
      "blocked": 286,
      "dns": 0,
      "connect": 0,
      "ssl": 0,
      "send": 0,
      "wait": 605,
      "receive": 163
    }

jq -r '.log.entries | to_entries[] | select(.value.response.httpVersion == "HTTP/2" and .value.timings.blocked > 0) | [.key, .value.request.url, .value.timings.blocked]' stackoverflow.com.har

Result

[12,"https://www.gravatar.com/avatar/05b09a797fd0c59d1627b30fb4cdba01?s=32&d=identicon&r=PG&f=1",140]
[19,"https://i.stack.imgur.com/jHqqo.jpg?s=32&g=1",319]
[22,"https://lh3.googleusercontent.com/a/AItbvmmvptZFLppl8vyYo83v1QOQJwt-90sdRzBnyw9Z=k-s32",7]
[23,"https://lh3.googleusercontent.com/a/AATXAJwXX0y4AkD3eL_6KvrwRXLmBviBVEXEb7X6U1WA=k-s32",6]
[27,"https://i.stack.imgur.com/kdIyT.jpg?s=32&g=1",314]
[48,"https://i.stack.imgur.com/65UsL.jpg?s=32&g=1",297]
[61,"https://i.stack.imgur.com/KLQJy.jpg?s=32&g=1",286]

HTTP/1.1

Chrome 可能有多种原因将请求排队 https://developer.chrome.com/docs/devtools/network/reference/#timing-explanation(与任何其他浏览器一样)

排队。浏览器在以下情况下对请求进行排队:

  • 有更高优先级的请求。
  • 已为此源打开 6 个 TCP 连接,这是限制。仅适用于 HTTP/1.0 和 HTTP/1.1。
  • 浏览器正在短暂分配磁盘缓存空间

从开发人员工具的“网络”选项卡中,保存请求Save all as HAR with content并分析timings每个请求的对象

    "timings": {
      "blocked": 2.0329999979403803,
      "dns": -1,
      "ssl": -1,
      "connect": -1,
      "send": 0.397,
      "wait": 189.6199999998943,
      "receive": 296.10200000024633,
      "_blocked_queueing": 1.1759999979403801
    }

HAR 可以通过以下方式过滤jq, e.g. 查找条目_blocked_queueing > 50

jq -r '.log.entries | to_entries[] | if(.value.timings._blocked_queueing > 50) then [.key, .value.request.url, .value.timings._blocked_queueing,.value.timings.blocked ] else empty end' stackoverflow.com.har

Result:

[
  21,
  "https://graph.facebook.com/4191055284264423/picture?type=large",
  160.28299999743467,
  160.66799999743466
]
[
  66,
  "https://fonts.gstatic.com/s/robotoslab/v13/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjojISmb2Rm.ttf",
  55.99899999651825,
  109.53999999651825
]
[
  67,
  "https://fonts.gstatic.com/s/robotoslab/v13/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoa4Omb2Rm.ttf",
  56.85599999560509,
  56.85599999560509
]

那么我们就可以检查 6 个前面的条目其中一项请求

jq -r --argjson idx 67 '.log.entries[($idx - 6):($idx + 1)] | .[] | [.request.url, .time, .timings]' stackoverflow.com.har

或者获取highest dns

jq -r '.log.entries | sort_by(.timings.dns|floor)[-1] | .timings.dns, .request.url' stackoverflow.com.har

438.551
https://example.com

谷歌提供了一个在线HAR分析仪 https://toolbox.googleapps.com/apps/har_analyzer/可以类似于开发工具网络窗格使用。

将鼠标悬停在请求上Waterfall栏,可以看到请求的详细信息。作为第一种方法,长排队请求之前可以是对任何项目具有高值的一个或多个请求。

使用下面的命令行获取 csv,然后使用以下命令制作图表

  • 日期为 Unix 时间戳 [ms]
  • 请求时间[毫秒]
  • _blocked_queueing [毫秒]
jq -r '.log.entries | to_entries[] | [.value.startedDateTime, .value.serverIPAddress, .key, ((.value.startedDateTime[0:19] + "Z"|fromdateiso8601)*1000 + (.value.startedDateTime[20:23]|tonumber)), .value.time, .value.timings._blocked_queueing ] | @csv' stackoverflow.com.har | tee stackoverflow.com.har.csv
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法调试 chrome 请求排队的原因? 的相关文章

  • localhost 拒绝在 chrome mac 中连接

    我正在使用 webpack dev server 使用此命令运行服务器 npm run dev 当我使用npm start 它工作得很好 但不想这样做 因为它是为了生产 到目前为止我的服务器运行良好http 本地主机 3000 http l
  • 如何从互联网访问本地网络内的服务器

    假设我有一个服务器应用程序在未直接连接到互联网但通过路由器连接的计算机上工作 所以问题是如何从不在内部网络 从互联网 内的另一台计算机连接到该服务器 据我所知 管理员可以配置路由器将指定端口请求重定向到该计算机 但我可以自动执行此操作吗 我
  • 测试/模拟 Chrome 中的方向变化?

    我们正在使用 jQuery mobile 编写一个移动应用程序 并在 Chrome 中进行大部分 javascript 调试 然而 我无法测试的一件事是方向变化 从纵向到横向 反之亦然 我必须使用手机来触发该事件 并且无法在没有 Chrom
  • 支持 Kubernetes NodePort 服务的 SSL/TLS

    问题 我需要通过 https 向外部公开 Kubernetes NodePort 服务 设置 我已经在裸机上部署了 Kubernetes 并且已经部署Polyaxon https github com polyaxon polyaxon通过
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • Android:如何监控WiFi信号强度

    当信号强度发生变化时我会收到通知 我尝试创建以下方法并在 onCreate 中调用它 private void initializeWiFiListener Log i TAG executing initializeWiFiListene
  • 浏览器正在加载两张图像 - 一张用于 srcset,一张用于 src(Chrome 41 等)

    我正在开发的网页上使用 srcset 属性 img src img picture 820x496 jpg 如果我检查页面加载了哪些资源 我会发现 Chrome 41 以及使用 polyfill 的 FF 以及 Safari 7 总是加载图
  • IPAddress.[Try]Parse 将 192.168 解析为 192.0.0.168

    我有以下场景 IPAddress ip IPAddress TryParse 192 168 out ip if ip null do something with IP 我预计解析会失败 但它被解析为 192 0 0 168 我在这里缺少
  • 绑定 popstate 事件不起作用

    我尝试在浏览器的控制台中输入以下代码 window onpopstate function alert 1 然后单击后退按钮 没有显示任何警报 难道我做错了什么 或者是否不允许将 popstate 事件绑定到控制台的页面 使用 Chrome
  • 有没有办法在 Google Chrome 中获取 XPath?

    我有一个网页想要与 YQL 一起使用 但我需要特定项目的 XPath 我可以在 Google Chrome 的调试工具区域中看到它 但我没有找到复制该 XPath 的方法 有没有办法复制完整的 XPath 您可以使用 x在 Chrome j
  • 检查 IPv4 地址是否在私有范围内

    在 Python 中 使用 IPy 模块您可以执行以下操作 gt gt gt ip iptype PRIVATE 有没有一个库或简单的方法可以在 Java 中执行相同的操作 似乎不完全是但是InetAddress有一些 isXX 方法 例如
  • 当 Chrome 中嵌套滚动中的数据更改时防止页面滚动

    我在页面中有一个固定大小的元素 带有 溢出 滚动 其内容经常更改 我预计该元素内部发生的更改会影响该元素的滚动 但不会影响页面滚动 但是当这个元素位于页面顶部时 页面本身开始滚动 我怎样才能防止这种情况发生 要重现此行为 我在 chrome
  • chrome 选项卡/窗口中的 window.open 行为

    我有一小段 javascript 旨在打开两个或更多选项卡 这在 FF 和 IE 中工作正常 但 chrome 会在新窗口而不是选项卡中打开第二个窗口 它不依赖于 url 因为我已经尝试过使用两个相同的 url 第一个在选项卡中打开 第二个
  • 如何使用chrome扩展文件系统api?

    嗨 作为例子 我想阅读 c x txt as text 和写 有关于 chrome fileSystem 的例子吗 注意 我不想向用户询问文件的路径 已经回答于Chrome 扩展 HTML 文件系统访问 https stackoverflo
  • 如何在自定义新标签页上显示 chrome 书签栏?

    我有一个问题 我构建 chrome 扩展并使用我的自定义页面覆盖 newtab 页面 书签栏显示在默认的 Chrome 新标签页上 但隐藏在我的自定义新标签页上 也许 有人有一些想法 如何使用 CHROME API 显示书签栏 请跳过诸如按
  • Git在Windows中的克隆比在Linux中慢得多

    我一直在追寻 Windows 上 github 克隆速度极慢的问题 Linux kali 没有这个问题 我的下行连接速度为 100 40 megabit s 我可以获得接近 8mb s 的下载速度 没有问题 我已将电脑直接插入互联网插座 无
  • Android Chrome 忽略 -webkit-text-size-adjust:none 属性。缩小时文本会缩放

    我们的客户请求一个网站 但不想支付移动版本的费用 我们仍在使其在移动设备上运行 当完全缩小时 Android 4 0 上的 Chrome 会缩放一堆文本 我们尝试设置 webkit text size adjust none 属性 但它似乎
  • 监控Mac网络流量

    我想知道如何监控 Mac 上的网络流量 就像活动监视器的方式一样 显示进出的字节 数据包 我知道这有点模糊 但我不确定最好的起点 编辑 我想用代码来完成此操作 而不是使用现有的软件 我刚刚找到了开源项目 菜单表 http www ragin
  • Chrome 中的 CSS 列不平衡

    我想使用以下方法在多列中动态显示一些 Bootstrap 列表组CSS 列 https developer mozilla org en US docs Web Guide CSS Using multi column layouts 但我
  • Node.js:将 repl 挂接到远程节点服务器

    假设我有一个节点服务器在 mysite com 上运行 有没有办法设置该服务器以便我可以使用节点的repl api http nodejs org docs latest api repl html to securely从我的本地计算机连

随机推荐

  • 为什么Java中方法调用中间要使用括号?

    尽管我做了一些广泛的搜索 但我遇到了一些代码 但无法理解它的某些方面 我的问题是 为什么在方法调用中间使用括号 package com zetcode import java awt event ActionEvent import jav
  • 如何使用 apache Camel 创建 IAM 用户?

    我有一个骆驼休息API 我试图使用 apache Camel 框架创建一个 IAM 用户 代码是这样的 gt post iam create user route process new Processor Override public
  • 我应该将安全代码与不安全代码混合在一起吗?

    我正在开发一个使用大量 WIN32 API 调用并需要一些不安全代码的项目 从最佳实践的角度来看 我是否应该将此代码隔离在使用 unsafe 开关编译的其自己的 DLL 中 同时保持主应用程序的安全 换一种方式 有什么理由不使用 unsaf
  • SVN - 在提交主干时提交外部

    简短而甜蜜 我有一个带有外部的项目 它允许我在一项操作中提交对该外部文件的更改以及对主干的更改 我有另一个带有外部的项目 它确实not允许我在主干旁边提交更改 最明显的区别是第二个外部被签出到复合目录 但除此之外我找不到任何区别 据我所知
  • 使用 fclose 到 popen 的管道是一个严重的错误?

    几个月前 我为 Linux 编写了一个 CGI 应用程序 它使用popen 读取命令的输出 然后我关闭管道fclose 现在 我读到关闭管道需要使用pclose 手册说 返回值来自popen 是一个普通的标准I O流 尊重除了它必须关闭pc
  • 名称“演员”未定义

    我在 python 编程方面遇到问题 当我尝试编写游戏时 由书本介绍 Coding Games Python DK 3 它说 名称 Actor 未定义 这是我的代码 import pgzrun from random import rand
  • R中的快速傅立叶变换

    我有一个数据集 其中包含动物在 12 个月内每小时的访问次数 我想使用快速傅里叶变换来检查循环模式和周期性 过去 我为此使用过 Statistica 但是 我想使用 R 来绘制频谱密度与周期的关系图 在 R 中是否有一种简单的方法可以做到这
  • 如何从 PreferenceActivity 外部更改首选项的状态?

    我的应用程序中有一些功能需要 Android 版本 4 2 因此 在我的主要活动中 我需要检查可用的操作系统功能并修改 启用 禁用 我的中定义的首选项项目PreferenceActivity 从外部无法访问以下代码PreferenceAct
  • 向任何指针添加字节偏移量的可移植且安全的方法

    我对使用 C 还很陌生 还没有掌握该语言的所有复杂性和微妙之处 什么是最便携 正确 安全在 C 11 中向任何类型的指针添加任意字节偏移量的方法 SomeType ptr int offset 12345 bytes ptr ptr off
  • 我可以拥有一个具有对其自身的外键引用的 Django 模型吗?

    好吧 我该怎么做呢 class Example models Model parent example models ForeignKey Example 我想让一个模型有一个对其自身的外键引用 当我尝试创建这个时 我收到一个 django
  • Flash Builder + Eclipse:禁用鼠标悬停弹出窗口?

    有什么方法可以禁用当鼠标悬停在代码上时出现的无聊弹出窗口吗 在 Eclipse 中 您可以通过转到 Window gt Preferences gt Java gt Editor gt Hovers 并取消选择其中的所有内容来删除它 我在
  • 在 C# 中从内存中释放指针

    我正在使用 C 处理指针fixed 短语 我将代码放在固定语句的括号内 并想知道垃圾收集是否会在固定语句之后处理指针释放 fixed int p x i work with x 如果不是我怎样才能释放它 您的指针指向托管对象 x 所以没有什
  • 如何更改表单内 Angular ngx-bootstrap 的日期选择器中的日期格式

    在 Angular 4 应用程序中使用 ngx bootstrap Datepicker 我知道通常您可以这样指定日期格式
  • 在 Windows 中安装 Python cx_Oracle 模块并连接到 Oracle 数据库

    我一直在尝试安装和设置此功能 尽管有几个链接描述了如何执行此操作 但我只是无法使其正常工作 我将首先描述设置 我的电脑 Windows 8 1 企业版 62 位 远程服务器 Oracle DB 版本 12 1 0 2 C Users Pym
  • 使用 Active Directory 进行 .NET 中的用户组和角色管理

    我目前正在研究用于存储基于 NET 的项目的用户角色和权限的方法 其中一些项目是基于网络的 有些则不是 我目前正在努力寻找最佳方法 以跨项目类型以一致 可移植的方式实现我正在寻找的目标 在我看来 我们希望利用 Active Director
  • 处理程序“ExtensionlessUrlHandler-Integrated-4.0”的模块列表中有一个错误的模块“ManagedPipelineHandler”

    老实说 我曾尝试在 IIS 上搞一个肮脏的把戏 正当我以为我能逃脱惩罚时 我意识到我的解决方法不起作用 这是我尝试做的 1 我有 ASP NET 应用程序预加载器继承的类IProcessHostPreloadClient并进行所有繁重的初始
  • Matlab 和 C# 之间的互操作

    浏览了互联网后 看起来 C 和 Matlab 之间可以互操作 我想知道是否有人取得了成功 以及他们做了什么 如果可能的话 以某种方式在不使用 COM 的情况下实现它 谢谢你的时间 从 MATLAB R2009a 版本开始 可以从 MATLA
  • Hibernate 选择具有给定属性的集合元素

    Entity Project具有集合属性contributors映射为 OneToMany与实体的关系User Entity Table name projects public class Project OneToMany JoinTa
  • 通过 p/invoke 从 c# 使用 XGBoost DLL

    我正在尝试使用XGBoost的 https github com dmlc xgboostdll libxgboost dll 来创建 DMatrix 类似于 2D 数组 并获取它有多少列 它运行良好 直到抛出一个System Access
  • 有没有办法调试 chrome 请求排队的原因?

    背景 Chrome 有一个请求队列 在某些情况下 它会对可延迟的请求进行排队 但我发现很难确定哪些请求导致请求排队 我的问题是 我们有办法深入了解排队问题的根本原因吗 源代码 https chromium googlesource com