Chrome扩展后台Service Worker挂起时是否需要主动移除监听器?
结论
你完全不需要手动调用removeListener移除注册的事件监听器,也不需要在runtime.onSuspend事件中执行清理逻辑。
原因说明
Chrome官方文档明确提到:
Service Worker在处于非活动状态数秒后会自行卸载
当Service Worker整个执行上下文被销毁时,你在其生命周期内注册的所有对象、事件绑定都会被完全清空,不存在残留的监听器占用资源或者重复绑定的问题:
- 你用到的
chrome.tabs.onRemoved.addListener这类扩展API事件监听,本身就是和当前Service Worker实例绑定的,SW卸载后对应的监听注册会自动失效 runtime.onSuspend事件的设计用途是做临时状态持久化,比如把内存中未存储的业务数据写入chrome.storage,不需要在这里执行监听器清理逻辑
注意事项
所有扩展事件监听器必须在Service Worker脚本的同步执行阶段完成注册,不要把addListener逻辑放在异步回调(比如storage.get的回调、Promise的then回调)中,否则Service Worker被事件唤醒后,异步逻辑还没执行完,事件触发时监听器未完成注册就会出现事件丢失的问题。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

