SharedWorker
HTML5スクリプトを開始するWebページがあります。Chromeのメモリ使用量は、このページがリロードされるたびに増加します(F5を押す)。
ワーカースクリプトは非常に単純です。毎秒(を使用して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]);
};
ホスティングページは共有ワーカーを開始/接続し、そこから受信したものをすべて出力します。
ワーカーコードは、接続されているポートのリストを保持し、1秒に1回すべてのポートにメッセージを送信します。
これは単純なことです。ただし、ホスティングページがChromeに再読み込みされるたびに。そのタブのメモリペイロードが増加します。
以下は、2、3回更新した後のChromeのメモリ使用量を示しています。
...もう少し更新した後、250MBに達しました...
これはChromeのバグに違いないと思って、アイデアが足りなくなっています。誰かが私にある種のポインタを教えてもらえますか?
更新2
AdBlock拡張機能を無効にすると、問題が解決したようです。
しばらくは嬉しかったのですが、まだメモリが漏れていることがわかりました。AdBlockを無効にすると、ページの更新ごとのリークがかなり少なくなります。