私はHTML5 SharedWorker
スクリプトを開始するWebページを持っています。このページがリロードされるたびに(F5を押す)、Chromeのメモリ使用量が増加します。共有ワーカーを使用したChromeでのメモリリーク?
ワーカースクリプトは非常に簡単です。毎秒(setInterval
を使用)、接続されたポートにメッセージが送信されます。
F5を押すたびに、ワーカープロセスが終了して再開されるようです。これは、実際には複数の「文書」によってワーカーが共有されているわけではないので、私が期待していることです。しかし、リフレッシュするたびにメモリ使用量が増加する理由はわかりません。
これはなぜ起こっているのですか?
ページがリロードされるたびにメモリが増えると、私はChromeで共有ワーカーを使用することはできません。誰もがメモリの問題を抱えずにそうすることができましたか?
UPDATE
これはホスティング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でホスティングページがリロードされるたびにそのタブのメモリペイロードが増加します。
以下はリフレッシュのカップルの後にChromeのメモリ使用量を示しています
...いくつかのより多くの私は250メガバイトに達しています...
を更新した後、私はアイデアがなくて、これはChromeのバグでなければならないと考えています。誰かが私に何らかのポインタを与えることができますか?私のAdBlockを拡張を無効に
UPDATE 2
は、問題を解決するように見えた:
だから私はしばらくのために幸せでしたが、それはメモリがまだリークされていることが判明しました。 AdBlockを無効にすると、1ページあたりの更新頻度がかなり低下します。
Chromeで '--purge-memory-button'フラグを指定してChromeのタスクマネージャを開き、[メモリを消去]ボタンをクリックした場合、拡張機能のメモリは初期レベルに戻っていますか? –
@Chrisまだ肥満です。それは肥大化しているホスティングページのメモリです。バックグラウンドスレッド(拡張)は肥大化されず、すべてのリフレッシュ時に再開されます(タスクマネージャで消えて再び表示されます)。 –