javascript - 完成后是否需要终止/关闭/删除网络 worker ?

标签 javascript html web-worker

我有一个应用程序使用网络 worker 来清理 indexedDB 数据库。我设置了它,所以它可以从全局函数调用启动,如果在完成之前再次调用该函数,它不会重新启动,但如果在完成后调用该函数,它会通过创建一个新实例重新启动 worker 的。这方面对我来说都很好。

在工作完成后,我是否需要删除、销毁、终止任何意义上的旧工作实例?

最佳答案

Do I need to delete, destroy, terminate the old instance of the worker in any sense after it's finished working?

在正常情况下,worker 会注册一个事件处理程序来监听来自主脚本的消息,所以是的,如果您希望卸载 worker,您需要告诉它取消注册。您可以通过以下两种方式之一执行此操作:

  1. 向它发送一条消息,告诉它进行清理,并让工作人员通过注销所有事件处理程序来响应该消息。这让工作人员可以优雅地退出。
  2. 使用Worker#terminate ,它会立即终止 worker,而不给它任何机会完成它正在做的事情。

如果 worker 没有监听消息,没有注册其他事件处理程序,也没有在循环中工作,则您不必做任何特定的事情(但这种可能性很小,工作人员几乎总是注册事件处理程序来收听消息)。

...but if the function is called after it's done it does restart, by creating a new instance of the worker.

我建议重新审视该设计。相反,一次创建 worker ,然后在每次需要它做某事时向它发送一条消息,而不是每次都重新创建整个事情。

关于javascript - 完成后是否需要终止/关闭/删除网络 worker ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49552529/

相关文章:

javascript - 我如何在循环中使用它?

使用 for 循环的 javascript 计数器

javascript - 如何仅在用户开始向下滚动后才显示标题? [ react ]

asp.net - 更改生成的 ASP.Net <form> id?

javascript - Web worker 使 setInterval 正常工作

javascript - 如何测量 Google 文档中的单词/插入符位置?

html - 使用 calc() 的 Div 间距偏移

python - html 向文档提交评论

JavaScript postMessage 和多个可传输对象

javascript - promise 导致崩溃的网络 worker