google-chrome - 有没有办法调试 chrome 请求排队的原因?
解决方案
Chrome 可能将请求排队的原因有多种(与任何其他浏览器一样)
排队。浏览器在以下情况下将请求排队:
- 有更高优先级的请求。
- 已经为此源打开了六个 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
,例如用 查找条目_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
结果:
[
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
或获得最高dns
jq -r '.log.entries | sort_by(.timings.dns|floor)[-1] | .timings.dns, .request.url' stackoverflow.com.har
438.551
https://example.com
这是我使用 Wireshark 对 TTFB 时序的分析,它可以作为调试工作的补充。
Google 提供了一个在线 HAR 分析器,可以使用类似于开发工具网络窗格。
将鼠标悬停在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
推荐阅读
- excel - 我对 VBA 中的 counta 函数有疑问
- dart - VS Code dart 行格式,行到屏幕中心后的新行
- java - 如何从 InstanceClass 枚举映射到实际的 AWS 实例类型
- php - 如何优化在具有 50M 行的表中总共执行 4000 次的 MYSQL 选择语句
- python - 如何避免这个熊猫数据框的迭代
- compiler-errors - U-Boot:尝试包含 TPM 头文件时出现编译错误
- java - javafx - 在第一个控制器上按下按钮后将参数传递给第二个控制器
- firebase - 错误:参数类型“字符串?” 不能分配给参数类型“字符串”
- c# - 我想在 UWP 应用中打开浏览器(用于 oAuth2 授权)
- ruby-on-rails - ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):将 JSON 参数发布到 Rails 控制器时