2010-03-23 65 views

回答

5

阻塞是一个术语,用于描述阻止其他事件或代码处理的事件(在同一个线程中)。

例如,如果您使用“阻塞”套接字,则套接字请求完成后的代码在请求完成之前(在同一线程中)将不会被处理。

异步活动(非阻塞)只会发出请求,让其他代码在请求发生在后台时运行。

在你的情况下,它基本上意味着萤火虫/浏览器的某些部分不能激活,直到其他部分完成。即它正在等待图像下载之前下载更多。

+3

是否可以设置Apache服务器来消除此类阻塞问题?我敢肯定,服务器可以做到这一点,因为几乎所有的IIS网站都没有这样的阻塞延迟,但“干净”的Apache安装它... – Laserson 2011-05-03 17:05:20

27

以前的“阻止”(早期版本的FireBug)被称为“排队”。这实际上意味着请求正在排队等待可用连接。据我所知默认情况下永久连接的数量在Firefox的最新版本到6中是有限的,IE8也是6.早些时候它只有2个。它可以由用户在浏览器设置中进行更改。
此外,虽然JavaScript文件正在加载,所有其他资源(CSS,图像)被阻止

+0

我只想补充一点,这就是为什么你应该加载javaScript文件最后如果可能的话)。如果不需要等待CSS或图像加载,该页面对用户来说似乎会更快地加载。 – dspacejs 2015-08-07 01:52:53

+0

另请参阅相应的[Mozilla官方文档](https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor#Timings)。 – tanius 2017-02-19 12:57:19

4

据我所知,有两个原因导致组件阻止其他人加载。

  1. 浏览器强制执行(但通常可配置)限制一次可以从特定主机加载多少个并行资源。
  2. 内嵌的JavaScript,这可能会导致浏览器等待,看看它是否在所有需要与下载的组件的其余部分继续(以防万一的JavaScript重定向或替换页面的内容)
1

这意味着“等待连接”。正如documentation by Mozilla中所述,“阻塞”是“在等待网络连接的队列中花费的时间”。这可能是由于Firefox触及其内部并行连接限制的原因,这里解释并在这里回答。

它也可能意味着“等待,因为服务器正忙”。在上面链接的官方文档中缺少“阻止”时间的一个可能原因:当服务器由于过载而无法提供连接时,可能会发生这种情况。在这种情况下,连接请求进入服务器的队列中,直到一个工作进程变为空闲时才能处理它[source]。

从技术意义上说,这样的连接还没有建立,因为请求正在等待服务器[source]的accept()。也许这就是为什么它被Firefox包含在“阻止”之下的原因,因为它也可以被认为是“等待网络连接排队的时间”。但是,从Firefox 51开始,这种行为并不完全一致:对于在新选项卡中调用的第一个URL,服务器接受连接请求之前的时间根本不包括在“定时”选项卡中 - 仅限于以便输入后续的URL。这两种行为都可能是一个错误,我不知道是哪一个。)

相关问题