2013-03-24 93 views
7

如果我有JavaScript代码正在运行,例如在计时器上执行某些操作,并且此代码嵌入在Web浏览器的选项卡1和选项卡2中的网页中,那么客户端代码是否可以同时运行?或者JavaScript客户端代码总是只在单个浏览器线程中运行?Javascript/web浏览器线程模型

或者,如果有一个父框架和子框架的框架,那么在这种情况下,javascript代码可以同时运行吗?

有没有标准的指定型号,还是依赖于浏览器?

我的主要目标环境是IE9,所以有兴趣知道那里会发生什么。

编辑 我不是在寻找线程支持或如何在javascript中执行线程。我个人认为没有必要。它也使生活更加复杂。我只想知道我是否需要担心它,以及在哪些浏览器上。

+0

两个标签完全无关;没有标准。 Chrome例如甚至在不同的*进程*中运行它们中的每一个,而Opera只知道在一个线程中做所有事情。 – Bergi 2013-03-24 14:40:22

回答

5

对于单个JavaScript“对象空间”(浏览器中的单个页面或node.js中的解释器实例),最多只有一个线程正在运行。实际上,在JavaScript语境中谈论线程是没有意义的。 JS执行模型是基于事件循环和回调的。

不同的框架永远不能并发运行,因为它们可以访问彼此的DOM(并通过扩展任意对象)。这会使线程不安全。

由于网络工作人员无法直接访问整个工作者边界的任何数据结构,因此线程不可观察且可以安全地发生。这里唯一的交流是通过消息传递。

+0

为什么你认为框架只使用消息进行通信?两页(不受SOP限制)可以与另一页的元素直接交互。 – Bergi 2013-03-24 14:41:47

+0

@Bergi对!我相应地改变了我的答案。这实际上表明不同的帧不能同时运行。 – usr 2013-03-24 15:00:07