javascript - 浏览器可以随时重新启动 Web Worker 吗?

标签 javascript web-worker

我在很多地方(包括这里的 Stack Overflow)都读到过,Web Worker 可以随时被浏览器杀死并重新启动。好吧,“随时”可能意味着“只要它们正在做某事”,但问题是它们可以在没有事先警告的情况下被浏览器杀死并重新启动,从而丢失 globalThis 中存储的任何数据.

但是在我的一生中,我在规范中找不到这一点,这让我很担心,因为我实际上使用的是一个 Web Worker,它的正常功能依赖于将一些信息数据保存在全局变量中,以在调用之间保持最小状态消息处理函数。

这个 Web Worker 的工作方式就像一个魅力,并且状态会被保留,除非页面刷新,但我担心如果浏览器决定重新启动 Web Worker,应用程序可能会失败,并且如果那样的话肯定会失败发生了。

我已经在谷歌上搜索过这个问题,特别是寻找在不需要全局状态的情况下重写我的网络 worker 的示例和替代方案,但我没有找到任何相关的内容。

谁能给我一些关于这方面的官方信息?

最佳答案

I've read in many places (including here, in Stack Overflow) that web workers can be killed and restarted by the browser at any time.

不,他们永远不会以任何方式重新启动您的(专用)Worker。

浏览器可以杀死一个 Worker 如果

  • 主要导航(也称为“页面”)已被终止。
  • Worker#terminate()方法已被调用。
  • DedicatedWorkerGlobalScope#close()方法已被调用,当前任务已完成。
  • worker becomes "orphan" 。当它不再是 "protected worker" 时,可能会发生这种情况。 , IE。
    • 当 Worker 是子 Worker(本身由 Worker 创建)且其所有者已被杀死时,
    • 或者当它没有计划任务、没有正在进行的网络请求或数据库事务、并且没有容易从外部接收消息的 MessagePort 或内部 Worker 对象时。<

因此,只要您在主线程中保留对 Worker 对象的引用,并且不将自己称为关闭方法之一,Worker 就不可能被浏览器。


注意:SharedWorkers、ServiceWorkers 和其他 Worklet 的规则都不同,此答案仅处理从 new Worker() 创建的 Dedicated Workers。

关于javascript - 浏览器可以随时重新启动 Web Worker 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75390803/

相关文章:

javascript - Web Worker 内的 RequireJS – onmessage 未调用

javascript - 无法使用 Multer 获取文件属性

javascript - 如何管理多个 Promise

javascript - Web Worker 在执行时抛出 404

javascript - 两个 javascript webworker 连续打印输出 - 为什么不同时呢?

javascript - 网络 worker : SetInterval and SetTimeout reliability

javascript - 使用 Switch 语句中单击的按钮

javascript - 使用 javascript 在 css 样式中添加一个新类

javascript - 下载使用 SheetJS/XLXS 在 Node 中创建的 excel 文件 [NodeJS] [React]

google-chrome - 如何在 Chrome 中配置网络 worker ?