了解Chrome网络日志"停滞"状态

set*_*tec 154 google-chrome http httprequest google-chrome-devtools

我在chrome中有以下网络日志:

网络日志

我不明白其中的一件事:填充灰色条和透明灰色条之间的区别是什么.

Ale*_*ara 176

Google在DevTools文档的评估网络性能部分中提供了这些字段的细分.

摘自资源网络时间:

失速/阻塞

请求在发送之前等待的时间.此时间包括代理协商所花费的任何时间.此外,这一次将包括当浏览器等待已建立的连接可供重用时,遵守Chrome的每个原始规则最多六个 TCP连接.

(如果您忘记了,Chrome在悬停工具提示和"计时"面板下方有一个"解释"链接.)

基本上,您将看到这一点的主要原因是Chrome每次只下载每个服务器6个文件,其他请求将停止,直到连接插槽可用.

这不一定需要修复,但避免陷入停滞状态的一种方法是将文件分布在多个域名和/或服务器上,如果适用于您的需要,请记住CORS,但HTTP2可能是更好的选择往前走.资源捆绑(如JS和CSS连接)也可以帮助减少停滞的连接数量.

  • 但是白色和灰色条之间有什么区别? (15认同)
  • 仅供参考:在chrome 42上,队列中等待的时间不会像文档所示计入停滞/阻止部分,但会包含在总数中.要获得队列中的时间,请从总计中减去所有部分.希望他们更新他们的文档(或修复错误). (4认同)
  • 本地文件是否也有 6 个文件的限制?从 `file:///C:/...` 加载页面时,我时不时会遇到停滞状态 (2认同)
  • @ AlexanderO'Mara错误点击 - 现在修复,谢谢你的回答 (2认同)

Nag*_*ran 10

DevTools:[network]解释请求之前的空条

进一步调查并确定我们的停滞和排队范围之间没有显着差异.两者都是根据其他时间戳的增量计算的,而不是从netstack或渲染器提供的.


目前,如果我们正在等待套接字可用:

  • 如果发生一些代理协商,我们会称之为停滞不前
  • 如果不需要代理/ ssl工作,我们会称之为排队.


小智 7

由于许多人到达这里调试他们缓慢的网站,我想告诉你我的情况,谷歌的解释都没有帮助解决。我的巨大停滞时间(有时 1 分钟)是由于 Windows 上运行的 Apache 的工作线程太少而无法处理连接,因此它们正在排队。

如果您的 apache 日志有以下注释,这可能适用于您:

Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
Run Code Online (Sandbox Code Playgroud)

此问题已在 Apache httpd.conf 中解决。取消注释: 包括conf/extra/httpd-mpm.conf

并编辑httpd-mpm.conf

<IfModule mpm_winnt_module>
   ThreadLimit              2000
   ThreadsPerChild          2000
   MaxConnectionsPerChild   0
</IfModule>
Run Code Online (Sandbox Code Playgroud)

请注意,您可能不需要 2000 个线程,或者可能需要更多。2000 年对我来说还可以。

  • 那么问题出在服务器上?为什么 Chrome 会停止运行?发送请求后它应该停止 (3认同)

bri*_*efy 6

https://developers.google.com/web/tools/chrome-devtools/network-performance/understanding-resource-timing

这来自Chome-devtools的官方网站,它有所帮助.在这里我引用:

  • 排队 如果请求排队,则表示:
    • 该请求被渲染引擎推迟,因为它被认为比关键资源(例如脚本/样式)的优先级低.这通常发生在图像上.
    • 该请求被搁置以等待即将释放的不可用TCP套接字.
    • 该请求被置于保持状态,因为浏览器在HTTP 1上每个源只允许六个TCP连接.1.制作磁盘缓存条目所花费的时间(通常非常快).
  • 停止/阻止 请求在发送之前等待的时间.它可以等待排队描述的任何原因.此外,此时间包括代理协商所花费的任何时间.

  • 如何解决这种情况? (2认同)