Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在同一浏览器线程中执行多个帧?_Javascript_Multithreading_Dom_Browser - Fatal编程技术网

Javascript 在同一浏览器线程中执行多个帧?

Javascript 在同一浏览器线程中执行多个帧?,javascript,multithreading,dom,browser,Javascript,Multithreading,Dom,Browser,当浏览器中有文档时,将从同一原始服务器加载一个或多个帧 这些帧由与主窗口相同的线程执行 或者有可能有一个过程很重的帧,而其他帧不会冻结 我还没有找到这方面的任何规范,有人知道它在哪里,如果它存在的话?我不是“浏览器如何工作”方面的专家,但我预测的是: 你不能肯定。这取决于引擎的类型(我们谈论的),浏览器和它的版本 如果我们谈论的是布局渲染引擎(通常是单线程的);一切都是在一个线程中的线性流中执行的传统上,它是“浏览器”的主线程,然后通过IE7,每个浏览器“窗口”都有自己的线程。但它一直在不断地变

当浏览器中有文档时,将从同一原始服务器加载一个或多个帧

这些帧由与主窗口相同的线程执行

或者有可能有一个过程很重的帧,而其他帧不会冻结

我还没有找到这方面的任何规范,有人知道它在哪里,如果它存在的话?

我不是“浏览器如何工作”方面的专家,但我预测的是:

你不能肯定。这取决于引擎的类型(我们谈论的),浏览器和它的版本

如果我们谈论的是布局渲染引擎(通常是单线程的);一切都是在一个线程中的线性流中执行的传统上,它是“浏览器”的主线程,然后通过IE7,每个浏览器“窗口”都有自己的线程。但它一直在不断地变化,现在几乎是每个“选项卡”都有一个线程

在标签内;当javascript正在执行时,呈现引擎会等待它完成。原因是Javascript引擎传统上共享同一个线程(但不一定)。甚至,异步事件也会排队等待适当的执行时间

另一方面,网络运营;在多个并行线程上处理。但再一次;这些操作的回调被注入到主线程中浏览器的事件循环中。(这就是为什么这些电话的数量通常是有限的)

用于渲染;内部/嵌入式框架(如
iframe
)受框架构造函数的约束(该构造函数负责每个具有尺寸、填充、边距、位置等的矩形框)。脚本执行在主窗口的同一线程中处理。(同样地,“通常是”“bec。在Opera中,如果是iframe,则可能不是这种情况。)

因此,每个浏览器都有一个内部调度实现,用于事件/操作排队和执行的时间和方式。例如下图演示了Gecko浏览器如何处理页面请求

浏览器可以决定是推迟回流还是立即回流。一般来说,原因是优化速度和涂漆,但通常要求立即回流。例如,更改布局的javascript代码,例如更改DOM元素的高度。这应该是立即回流,以便渲染引擎能够准确计算元素的边界并继续布局过程。请参阅关于壁虎回流可视化

回到关于非冻结重流程的第二个问题:

在Opera中,您可以将一个繁重的进程加载到iframe,并且它可能不会阻塞主窗口。但这也可能随着时间的推移而改变。如果你不能得到你的手上的API承诺这一点;您不能将其视为非阻塞。作为开发人员,您应该考虑Javascript和DOM操作的单线程

你能做的就是查看HTML5规范中的网络工作者。他们可以通过javascript访问。我不相信这会给javascript带来多线程,因为工作人员只能通过消息与另一个线程对话,而不能直接访问DOM。但是,您仍然可以将繁重的计算分配给工作人员,而不会干扰您所在的线程

更多资源:
我不是“浏览器如何工作”方面的专家,但我预测:

你不能肯定。这取决于引擎的类型(我们谈论的),浏览器和它的版本

如果我们谈论的是布局渲染引擎(通常是单线程的);一切都是在一个线程中的线性流中执行的传统上,它是“浏览器”的主线程,然后通过IE7,每个浏览器“窗口”都有自己的线程。但它一直在不断地变化,现在几乎是每个“选项卡”都有一个线程

在标签内;当javascript正在执行时,呈现引擎会等待它完成。原因是Javascript引擎传统上共享同一个线程(但不一定)。甚至,异步事件也会排队等待适当的执行时间

另一方面,网络运营;在多个并行线程上处理。但再一次;这些操作的回调被注入到主线程中浏览器的事件循环中。(这就是为什么这些电话的数量通常是有限的)

用于渲染;内部/嵌入式框架(如
iframe
)受框架构造函数的约束(该构造函数负责每个具有尺寸、填充、边距、位置等的矩形框)。脚本执行在主窗口的同一线程中处理。(同样地,“通常是”“bec。在Opera中,如果是iframe,则可能不是这种情况。)

因此,每个浏览器都有一个内部调度实现,用于事件/操作排队和执行的时间和方式。例如下图演示了Gecko浏览器如何处理页面请求

浏览器可以决定是推迟回流还是立即回流。一般来说,原因是优化速度和涂漆,但通常要求立即回流。例如,更改布局的javascript代码,例如更改DOM元素的高度。这应该是立即回流,以便渲染引擎能够准确计算元素的边界并继续布局过程。请参阅关于壁虎回流可视化

回到关于非冻结重流程的第二个问题:

在Opera中,您可能会将一个繁重的进程加载到iframe,而它可能不会阻止mai