8

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 万件のメッセージを送信すると、ヒープ スナップショットは次のようになります。ヒープのスナップショット

ページの存続期間中、メモリが再利用されることはないようで、修正方法について困惑しています。

編集: これは標準の背景ページであり、イベント ページではありません。

4

1 に答える 1