【问题标题】:Memory leakage in Chrome using Shared Worker?使用 Shared Worker 的 Chrome 内存泄漏?
【发布时间】:2011-10-30 04:08:56
【问题描述】:

我有一个启动 HTML5 SharedWorker 脚本的网页。每次重新加载此页面(按 F5)时,Chrome 内存使用量都会增加。

worker 脚本非常简单。每一秒(使用setInterval)都会向连接的端口发送一条消息。

似乎每次我按 F5 时工作进程都会终止并重新启动。这是我所期望的,因为工作人员实际上并没有被多个“文档”共享。但是,我无法弄清楚为什么每次刷新时内存使用量都会增加。

有人知道为什么会这样吗?

考虑到每次重新加载页面时内存都会增加,这让我觉得我根本无法在 Chrome 中使用共享工作者。有没有人能够在没有记忆问题的情况下这样做?

更新

这是托管 HTML:

<div id="output"></div>
<script type="text/javascript" src="/scripts/jquery-1.4.4.js"></script>
<script type="text/javascript">
$(function () {
    var worker = new SharedWorker("/scripts/worker.js") 

    worker.port.onmessage = function(e) {
        $("#output").append($("<div></div>").text(e.data));
    }; 

    worker.port.start();
});
</script>

...这是worker.js:

var list = [];

setInterval(function () {
    for (var i = 0; i < list.length; ++i) {
        list[i].postMessage("#connections = " + list.length);
    }
}, 1000);

onconnect = function (event) {
    list.push(event.ports[0]);
}; 

托管页面启动/连接到共享工作器并输出从它接收到的任何内容。

worker 代码保存一个已连接端口的列表,并每秒向它们发送一条消息。

这很简单。然而,每次在 Chrome 中重新加载托管页面时。该选项卡的内存负载增加了。

以下显示了几次刷新后 Chrome 的内存使用情况:

...刷新后我达到了 250 MB...

我的想法已经不多了,我想这一定是 Chrome 中的一个错误。谁能给我一些指针?

更新 2

禁用我的 AdBlock 扩展似乎可以解决问题:

所以我高兴了一阵子,结果发现内存还在泄露。禁用 AdBlock 后,每次页面刷新的泄漏量要少得多。

【问题讨论】:

  • 如果您使用 --purge-memory-button 标志启动 Chrome,然后打开 Chrome 的任务管理器并单击“清除内存”按钮,您的扩展程序的内存是否恢复到初始水平,还是看起来仍然臃肿?
  • @Chris 它仍然臃肿。膨胀的是托管页面的内存。后台线程(扩展)并不臃肿,每次刷新都会重新启动(在任务管理器中消失并重新出现)。

标签: html google-chrome memory-leaks web-worker


【解决方案1】:

Chromium 团队似乎已经解决了这个问题。我不能再复制它了。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2014-05-02
    • 2013-11-06
    • 1970-01-01
    • 2017-05-02
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多