了解Chrome网络日志的“停滞”状态


172

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

网络日志

我不了解其中的一件事:填充的灰色条和透明的灰色条有什么区别。


2
在过去的两个星期中,我经常看到这种情况。当我在chrome中执行shift-refresh时,有125个项目正在加载。每隔一段时间,这些文件中的3-4个就会卡在“停止”状态。所有文件均为.png文件。唯一的解决方法是关闭选项卡,重新打开另一个表并重新打开开发工具。我已经在此代码库上工作了一年以上,没有出现此问题,并且我认为没有任何更改会导致png文件上出现这种行为。
格雷格·格拉特

Answers:


202

Google在 其DevTools文档评估网络性能”部分。

资源网络时间节录摘录:

堵转/堵转

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

(如果您忘记了,Chrome会在鼠标悬停工具提示和“时间”面板下提供一个“说明”链接。)

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

这不一定需要解决,但是避免停滞状态的一种方法是将文件分布在多个域名和/或服务器上,并在需要时考虑CORS,但是HTTP2可能是一个更好的选择向前走。资源捆绑(例如JS和CSS串联)也可以帮助减少停顿的连接数量。


1
本地文件的6文件限制是否也到位?从file:///C:/...
Ilya Kogan

@IlyaKogan从文件系统加载时似乎没有6个文件的限制,但是似乎有一个“停顿”阶段。我的猜测是,这代表Chrome在文件系统上打开文件所花费的时间,而“内容下载”阶段则代表将内容加载到内存所花费的时间。
亚历山大·奥玛拉

4
仅供参考:在chrome 42上,如文档所示,队列中等待的时间不算作“停顿/阻止”部分,而是包含在总数中。要获得排队时间,请从总数中减去所有部分。希望他们更新他们的文档(或修复错误)。
delrox

20
但是,白色和灰色的条形有什么区别?
凯特2015年

不建议使用域分片来实现更高的并发性。请改用HTTP2。请参阅:youtube.com/watch?
v=yURLTwZ3ehk

13

DevTools:[网络]解释空酒吧之前的请求

经过进一步调查,发现“停顿”和“排队”范围之间没有显着差异。两者都是从其他时间戳记的增量计算得出的,而不是从netstack或渲染器提供的。


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

  • 如果发生代理协商,我们称之为停滞
  • 如果不需要代理/ ssl工作,我们将其称为排队。

6

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

这来自Chome-devtools的官方网站,它可以帮助您。在这里我引用:

  • 排队 如果请求排队,则表明:
    • 由于请求的优先级低于关键资源(例如脚本/样式),因此渲染引擎推迟了该请求。这通常发生在图像上。
    • 该请求被搁置以等待即将释放的不可用的TCP套接字。
    • 由于浏览器在HTTP 1上每个源仅允许六个TCP连接,因此该请求被暂停。花费在制作磁盘缓存项上的时间(通常非常快)。
  • 停顿/阻塞 时间请求发送之前等待的时间。它可能正在等待队列中描述的任何原因。此外,此时间包括在代理协商中花费的任何时间。

1

我的情况是页面打开时页面正在发送具有不同参数的多个请求。因此,大多数都被“停滞了”。随即发送的以下请求将“停止运行”。避免不必要的请求会更好(懒惰...)。


1

由于许多人来到这里调试他们的慢速网站,因此我想向您介绍我的情况,而Google的解释都无法解决这个问题。我的巨大停滞时间(有时是1分钟)是由于Windows上运行Apache的工人线程太少而无法处理连接,因此它们正在排队。

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

Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting

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

并编辑httpd-mpm.conf

<IfModule mpm_winnt_module>
   ThreadLimit              2000
   ThreadsPerChild          2000
   MaxConnectionsPerChild   0
</IfModule>

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.