7

SharedWorker我有一个启动 HTML5脚本的网页。每次重新加载此页面(按 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]);
}; 

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

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

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

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

刷新几次后,我达到了 100 MB

...再刷新一些后,我达到了 250 MB...

再次刷新后达到 250 MB

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

更新 2

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

在没有 AdBlock 的情况下运行

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

4

1 回答 1

1

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

于 2012-08-13T15:56:19.040 回答