使用Transferables时Web Worker内存泄漏问题(Chromium M92+)
结论:这是Chromium M92/M93引入的内存泄漏Bug,并非你的代码问题
你的代码逻辑完全符合Web Worker传输可转移对象的最佳实践:
- 主进程通过
postMessage将ImageBitmap转移给Worker,避免了数据复制 - Worker使用
transferFromImageBitmap接管图像数据,转换为Blob后再将ArrayBuffer转移回主进程
在Chromium M92/M93之前(包括Electron 13基于的Chrome 91)该流程完全正常,说明是新版本Chromium内核引入的原生Bug。你提交Bug报告的做法是正确的。
关于现象差异的说明
你提到的在线示例中内存最终回落但Electron中不会,是因为Electron的V8引擎和Chromium内存回收机制与普通Chrome浏览器存在差异,导致该Bug的内存泄漏表现更持久、更明显。
临时解决方案
- 移除transferables数组:这是目前能直接解决内存泄漏的方案,虽然会带来一定的性能损耗(数据复制),但能保证内存稳定
- 手动资源清理(尝试性):在Worker处理完图像后,可尝试手动释放相关资源,比如在
postMessage后调用ctx.clearRect(0, 0, canvas.width, canvas.height),但这无法从根本上修复Bug,仅能缓解内存增长速度
内容的提问来源于stack exchange,提问作者Kajuna
相关产品推荐
相关产品推荐

