我有一个使用Web worker清理indexedDB数据库的应用程序。我有它设置所以它可以从全局函数调用启动,如果该函数在完成之前再次调用,它不会重新启动,但如果函数在完成后调用它会重新启动,通过创建一个新实例工人这一切都适合我。
在完成工作后,我是否需要删除,销毁,终止该工作的旧实例?
答案 0 :(得分:4)
在完成工作后,我是否需要删除,销毁,终止该工作的旧实例?
在正常情况下,工作人员注册一个事件处理程序来侦听来自主脚本的消息,因此,如果您希望卸载工作程序,则需要告诉它取消注册。您可以通过以下两种方式之一来实现:
Worker#terminate
,它会立即终止工作人员而不给它任何机会完成它正在做的事情。如果工作人员没有收听消息,没有注册其他事件处理程序,并且没有循环工作,则不必执行任何特定操作(但可能性很低,工作人员几乎总是注册事件处理程序来收听消息。)
...但是如果在完成后调用该函数,它会通过创建一个新的worker实例来重新启动。
我建议您重新审视该设计。相反,创建工作人员一次,然后每次需要它时发送一条消息,而不是每次都创建整个事件。