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 的内存使用情况:
...再刷新一些后,我达到了 250 MB...
我的想法不多了,认为这一定是 Chrome 中的错误。谁能给我一些指针?
更新 2
禁用我的 AdBlock 扩展似乎可以解决问题:
于是我高兴了一阵子,结果发现内存还是被泄露了。禁用 AdBlock 后,每次页面刷新的泄漏量要少得多。