在Chrome + FF中终止Web工作进程后发生内存泄漏

af7jpaap  于 2022-12-06  发布在  Go
关注(0)|答案(2)|浏览(158)

我有一个Web应用程序,需要在后台工作线程中执行繁重的JavaScript工作。我为此加载了一个非常大的文件。示例文件如下:https://www.dropbox.com/s/09b4d60d4c0i5dr/test.js
问题是,将脚本加载到Web Worker然后终止该Worker似乎会造成大量内存泄漏。Chrome会损失大约30MB,FF会损失大约10MB。重复这样做最终会导致浏览器崩溃。
示例代码:

<html>
<script type="text/javascript">
var worker = new Worker("test.js");

// Wait until the worker is loaded, then terminate it: 
setTimeout(function() {
    worker.terminate();
}, 5000);
</script>
</html>

JavaScript文件本身不执行任何计算,它只定义了一个巨大的函数。如果你想查看它的内容,我建议使用VIM。
有什么想法吗?

更新

这个bug和Emscripten无关。我设法用一个什么都不做的非常愚蠢的函数重现了它。我更新了演示JS文件。

omqzjyyz

omqzjyyz1#

根据MDN的说法,终止一个工作线程意味着“*[该]工作线程被立即杀死,没有机会完成其操作或清理其自身 *”(https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_worker #Terminating_a_worker),所以我想如果你想让你的Web应用运行而不泄漏太多内存,“杀死”一个工作线程不是一个合理的选择ATM..

5t7ly7z5

5t7ly7z52#

至少有一个issue是为Chromium打开的,他们在版本53.0.2785.8中解决了这个问题,但它仍然在最新的Chrome(106.0.5249.91)和Edge(105.0.1343.53)中重现。
最新的Firefox(105.0.1)似乎没有同样的问题。看起来像是Chromium的问题。

相关问题