当标签在运行时,HTML5 Web工作者线程发生了啥?

Posted

技术标签:

【中文标题】当标签在运行时,HTML5 Web工作者线程发生了啥?【英文标题】:What happens to an HTML5 web worker thread when the tab is closed while it's running?当标签在运行时,HTML5 Web工作者线程发生了什么? 【发布时间】:2012-01-16 02:49:40 【问题描述】:

我想知道当用户关闭产生工作线程的选项卡时会发生什么,而线程仍在工作。它会停止一切吗?如果是这样,即使关闭选项卡,是否有办法在后台运行线程?

【问题讨论】:

8年过去了,更新这么小。现在我们有服务工作者可以在一段时间内比站点寿命更长。如果没有新的事件需要处理,它就会消失。但它可以比标签更长寿。 w3.org/TR/service-workers-1/#service-worker-lifetime***.com/questions/46281337/… 【参考方案1】:

是的,它会停止一切,一个(敬业的)工人不能活得比它的主人长。如果您使用一个可以有多个所有者的共享工作器,则该工作器只有在至少一个所有者还活着的情况下才能存活。即使您将纠缠的MessagePort 传递给另一个窗口也是如此(即消息端口的所有者不是工人的所有者)。

因此,对于共享工作人员,您可以通过打开一个新窗口来“转移”所有权,该窗口与工作人员建立自己的连接(使用new SharedWorker(...)),然后关闭旧窗口。但必须始终打开一个窗口。

【讨论】:

【参考方案2】:

看这里

http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workerglobalscope

认为确认一旦浏览器消失,任何工作人员都必须停止。

当一个 Document 对象被丢弃时,它必须从 每个工人的工人文档列表,其列表包含 文件。

如果您有一个使用 Web Worker 的窗口,而您关闭了该窗口(或选项卡),该 Worker 就会消失。

如果您有一个窗口,可以打开其他窗口或选项卡,则工作人员可以继续。但如果你关闭所有东西,它们都会消失。

【讨论】:

澄清一下,由于讨论集中在新窗口上,这也应该适用于新页面加载。加载新页面会丢弃当前文档对象(web worker 消失),并在新文档加载时重新创建。

以上是关于当标签在运行时,HTML5 Web工作者线程发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章

html5之Web Worker -- js多线程编程

HTML5 Web Workers 运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。类似多线程并行处理

HTML5 Web Workers 运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。类似多线程并行处理

android中Invalidate和postInvalidate的区别

在不同的工作表中根据单元格(其中有公式)改变标签页的颜色,适用于多个工作表。

为啥任务取消发生在调用者线程上?