浏览器窗口中的所有选项卡是否共享一个JavaScript线程?

MLi*_*ter 24 javascript browser

通常,浏览器中的JavaScript执行被视为单线程.此单个线程是否适用于在浏览器窗口中打开的所有选项卡?

换句话说,如果(不同的)JavaScript代码在不同的选项卡中运行,它们都是使用单个线程执行的?

此外,当您打开同一浏览器的多个窗口并且每个窗口包含多个选项卡时会发生什么?

最后,上述答案是否取决于浏览器供应商/版本等?

Lep*_*eus 13

没有办法以通用方式回答这个问题,因为这是特定于浏览器的实现.

几乎每个旧浏览器总是为每个选项卡使用单个线程,但更现代的浏览器/版本可能已经改变了(例如,chrome 每个选项卡有一个线程 - 实际上,它甚至每个选项卡都有一个完整的进程).编辑:评论更正

实际上,chrome使用Process-per-site-instance.这意味着在多个选项卡中打开的单个站点仍将由同一进程呈现

如果你出于性能原因要求它(有点像问"可以使用永恒的无限循环阻止我网站中的所有内容,或者会扩展到其他选项卡"),那么假设线程是由大家.如果它在当前的浏览器中,那么你计划了它,如果不是那么你会获得比计划更好的性能,几乎不是问题.

为了让一些代码在自己的线程中运行,在Web Workers中有一个循环,但它们仍远未在每个"现代"浏览器中完全实现.

  • 实际上,chrome使用Process-per-site-instance.这意味着在多个选项卡中打开的单个站点仍将由同一进程呈现. (7认同)