如果我运行了javascript代码,例如对计时器执行某些操作,并且此代码嵌入在Web浏览器的选项卡1和选项卡2中的网页中,那么客户端代码是否可以同时运行?或者javascript客户端代码是否总是只在一个浏览器线程中运行?
或者,如果有一个包含父框架和子框架的框架集,那么在这种情况下javascript代码可以同时运行吗?
是否有标准的指定型号或是否与浏览器有关?
我的主要目标环境是IE9,所以有兴趣知道那里会发生什么。
EDIT 我不是在寻找线程支持或如何在javascript中进行线程化。我个人认为没有必要。它也使生活变得更加复杂。我只是想知道我是否需要担心它,如果是这样的话,我想知道哪些浏览器。
答案 0 :(得分:5)
对于单个JavaScript“对象空间”(浏览器中的单个页面或node.js中的解释器实例),最多只有一个线程在运行。事实上,在JavaScript的上下文中谈论线程是没有意义的。 JS执行模型是基于事件循环和回调的。
不同的帧永远不能同时运行,因为它们可以访问彼此的DOM(以及扩展的任意对象)。这会使线程不安全。
对于Web worker,无法直接访问跨工作线边界的任何数据结构,因此无法观察到线程并且可以安全地进行。这里唯一的沟通是通过消息传递。