Chrome TCP连接排队很长时间

时间:2018-05-09 01:14:38

标签: javascript

在Chrome开发者工具中,我注意到我与特定来源有6个TCP连接。从我所知道的,前5个连接是空闲的。对于最后一个连接,Chrome正在调用我们的亚马逊S3,以根据应用程序逻辑获取一些图像。我注意到,对该连接的所有请求都排队等到某个时间点(比如T1),然后下载图像。当然,这种情况难以重现,所以我正在寻找可能发生的事情的一些提示。

我的问题:

  1. 有问题的连接没有"初始连接"在定时信息中,这意味着之前可能已在不同的选项卡中建立了连接。那有道理吗?

  2. 同一来源的其他5个连接是针对不同的远程地址。这是因为它们不能用于检索第6个连接正在检索的图像吗?

  3. 是否有一种机制可以避免前端在这种情况下出现这种排队延迟?

  4. enter image description here

2 个答案:

答案 0 :(得分:1)

来自docs(强调我的)

  

正在排队的请求表示:

     
      
  • 请求被渲染引擎推迟,因为它被认为优先于关键资源(例如   脚本/样式)。这通常发生在图像上。

  •   
  • 请求被暂停,等待即将释放的TCP套接字不可用。

  •   
  • 请求被暂停,因为浏览器在HTTP上每个来源只允许六个TCP连接 1.制作磁盘缓存所花费的时间   条目(通常很快。)

  •   

这可能与您从亚马逊服务部门请求的图片数量有关。根据这段摘录,不同来源的请求不应相互影响。

如果要加载大量图像,那么考虑使用精灵表或某些内容可能会对您有所帮助 - 但这取决于您请求的图像的性质。

答案 1 :(得分:1)

好像你一次发出太多请求。

由于HTTP 1.1中的最大活动请求数限制为6,因此所有其他请求将排队,直到活动请求完成。

作为替代方案,您可以在服务器上使用HTTP 2 / Speedy,它不会对应用程序产生大量并行请求产生任何此类限制和许多其他好处。

您可以在nginx / apache上轻松启用HTTP 2。