Chrome の chrome.extension.sendMessage() を使用して、長期間有効なページでかなり大量のメモリ リークが発生しています。
テストとして Content-Script から Background-Page に ~200k イベントを送信した後、chrome.Event の保持サイズは ~50MB のヒープ スナップショットで保持されたメモリの ~80% です。
私は自分が犯している可能性のある間違いを追跡し、いくつかの変数を閉じてGCされないようにしていますが、Chromeのイベントシステムの実装に関連しているようです.
誰かがこのようなことに遭遇したり、bg ページで多くのおしゃべりをする Content-Scripts を使用した非常に長寿命の拡張機能でメモリ リークを見たことがありますか?
私の Content-Script 側のコード:
csToBg = function(message) {
var csToBgResponseHandler = function(response) {
console.log("Got a response from bg");
};
var result = chrome.extension.sendMessage(null, message, csToBgResponseHandler)
};
また、Background-Page 側では、単純な ACK 関数 (迷信的にhttps://code.google.com/p/chromium/issues/detail?id=114738を避けるため):
var handleIncomingCSMessage = function(message, sender, sendResponse) {
var response = message;
response.acked = "ACK";
window.console.log("Got a message, ACKing to CS")
sendResponse(response);
}
この方法で Chrome 23.0.1271.97 で最大 20 万件のメッセージを送信すると、ヒープ スナップショットは次のようになります。
ページの存続期間中、メモリが再利用されることはないようで、修正方法について困惑しています。
編集: これは標準の背景ページであり、イベント ページではありません。