一般来说,浏览器中的 JavaScript 执行被视为单线程。这个单一线程是否适用于浏览器窗口中打开的所有选项卡?
换句话说,如果(不同的)JavaScript 代码在不同的选项卡中运行,那么它们都是使用单个线程执行的?
此外,当您打开同一浏览器的多个窗口并且每个窗口包含多个选项卡时会发生什么?
最后,上述问题的答案是否取决于浏览器 vendor/版本等?
最佳答案
无法以通用方式回答这个问题,因为这是特定于浏览器实现的。
几乎每个较旧的浏览器总是为每个选项卡使用一个线程,但更现代的浏览器/版本可能已经改变了这一点(例如,chrome 每个选项卡都有一个线程 - 实际上,它甚至每个选项卡都有一个完整的进程)选项卡)。
编辑:评论的更正
Actually chrome uses Process-per-site-instance. That means a single site opened in multiple tabs will still get rendered by the same process
如果您出于性能原因而询问它(有点像问“可以使用永恒的无限循环来阻止我网站中的所有内容,或者会传播到其他选项卡”),则更安全的假设是该线程是大家共享的。如果它在当前浏览器中,那么您就计划了它,如果不是,那么您将获得比计划更好的性能,这几乎不成问题。
为了让一些代码在自己的线程中运行,请在Web Workers处有一个循环,但它们还远未在每个“现代”浏览器中完全实现。
关于javascript - 浏览器窗口中的所有选项卡是否共享一个 JavaScript 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17169742/