我正在使用 Firebug 1.5.2,并且在生产发布之前测试站点时,我可以看到“阻止”部分请求所消耗的大量时间。
“阻塞”到底是什么意思?
“阻塞”以前(FireBug 的早期版本)被称为“排队”。这实际上意味着请求正在排队等待可用的连接。据我所知,Firefox 最新版本的默认持久连接数限制为 6,IE8 也限制为 6。之前只有 2。用户可以在浏览器设置中更改。
另外据我所知,在加载 javascript 文件时,所有其他资源(css、图像)都被阻止
阻塞是一个术语,用于描述阻止其他事件或代码处理(在同一线程内)的事件。
例如,如果您使用“阻塞”套接字,那么在请求完成之前(在同一个线程中),套接字请求之后的代码将不会被处理。
异步活动(非阻塞)将简单地发出请求并让其他代码在请求发生在后台时运行。
在您的情况下,这基本上意味着萤火虫/浏览器的某些部分在其他部分完成之前无法激活。即在下载更多图像之前,它正在等待下载图像。
As far as I know, two reasons cause components to cause blocking others from loading.
这意味着“等待连接”。正如Mozilla 官方文档中所解释的,“阻塞”是“在队列中等待网络连接所花费的时间”。这可能是由于 Firefox 达到了其内部并行连接限制,正如在此处和此处的答案中所解释的那样。
它也可能意味着“等待,因为服务器很忙”。上面链接的官方文档中缺少“阻塞”时间的一个可能原因:当服务器由于过载而无法提供连接时,可能会发生这种情况。在这种情况下,连接请求会进入服务器上的队列,直到可以在工作进程空闲时对其进行处理[来源]。
从技术意义上讲,这样的连接还没有建立,因为请求正在等待accept()
来自服务器 [源]。也许这就是为什么它被 Firefox 归入“阻止”的原因,因为它也可以被认为是“在等待网络连接的队列中花费的时间”。
(这种行为在 Firefox 51 中并不完全一致:对于在新选项卡中调用的第一个 URL,在“时间”选项卡中根本不计算服务器接受连接请求之前的时间 - 仅适用于输入的后续 URL . 这两种行为中的任何一种都可能是错误,我不知道是哪一种。)