我完成后,是否需要终止/关闭/删除网络工作者?

时间:2018-03-29 09:31:14

标签: javascript html5 web-worker

我有一个使用Web worker清理indexedDB数据库的应用程序。我有它设置所以它可以从全局函数调用启动,如果该函数在完成之前再次调用,它不会重新启动,但如果函数在完成后调用它会重新启动,通过创建一个新实例工人这一切都适合我。

在完成工作后,我是否需要删除,销毁,终止该工作的旧实例?

1 个答案:

答案 0 :(得分:4)

  

在完成工作后,我是否需要删除,销毁,终止该工作的旧实例?

在正常情况下,工作人员注册一个事件处理程序来侦听来自主脚本的消息,因此,如果您希望卸载工作程序,则需要告诉它取消注册。您可以通过以下两种方式之一来实现:

  1. 发送消息告诉它清理,让工作人员通过取消注册所有事件处理程序来响应该消息。这可以让工作人员优雅地退出。
  2. 使用Worker#terminate,它会立即终止工作人员而不给它任何机会完成它正在做的事情。
  3. 如果工作人员没有收听消息,没有注册其他事件处理程序,并且没有循环工作,则不必执行任何特定操作(但可能性很低,工作人员几乎总是注册事件处理程序来收听消息。)

      

    ...但是如果在完成后调用该函数,它会通过创建一个新的worker实例来重新启动。

    我建议您重新审视该设计。相反,创建工作人员一次,然后每次需要它时发送一条消息,而不是每次都创建整个事件。