Web Worker 内存泄漏?
Posted
技术标签:
【中文标题】Web Worker 内存泄漏?【英文标题】:Web Worker Memory Leak? 【发布时间】:2013-03-16 19:36:43 【问题描述】:我一直在使用Chrome's Timeline 视图来尝试追踪我的页面中的一些内存泄漏。我发现了一个特殊的内存泄漏,它是由实例化网络工作者导致的,我似乎无法弄清楚如何摆脱它。
我已经剥离了页面,只加载了 web worker,什么都不做。每次刷新页面时,Chrome 时间轴视图上的 Document Count 都会永久增加 1。如果我注释掉对 Worker 构造函数的调用,并开始刷新页面,文档计数会先增加后减少,实际上保持不变。手动终止/关闭 worker 并不能解决问题(尽管当我查看开发人员工具的 Sources 选项卡时可以看到 worker 消失了)。
这是我精简的 .htm 文件。我可以用这一小段 html/javascript 重现这个问题:
<html>
<script type="text/javascript">
var worker_blob = new Blob(["var test = 1;"]);
var worker_url = window.URL.createObjectURL(worker_blob);
// Comment out the line below and the memory leak goes away
var worker = new Worker(worker_url);
window.URL.revokeObjectURL(worker_url);
</script>
</html>
【问题讨论】:
当您的工作人员完成其任务时,它可以close 自己或您的页面可能会调用terminate
。
我已经尝试了这两种方法,但都没有解决这个问题。另外,当我离开页面时应该终止worker。
这是偶然code.google.com/p/chromium/issues/detail?id=181680 吗?
我不能说我完全理解错误报告,但它似乎与我遇到的问题有关。希望这个简单的测试用例可以帮助您重现/解决问题。
【参考方案1】:
这是 Chrome v25 中的内存泄漏。它似乎已在 Chrome v26 中得到修复,因为该问题无法再重现。
【讨论】:
以上是关于Web Worker 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章