chrome.extension.sendMessage()中的Chrome扩展内存泄漏?

sgr*_*ove 8 google-chrome google-chrome-extension google-chrome-devtools

我使用Chrome的chrome.extension.sendMessage()在长寿命页面中看到相当大的内存泄漏

在将〜200k事件从Content-Script发送到Background-Page作为测试后,chrome.Event的保留大小约为~50MB堆快照中保留内存的80%

我一直试图追查我可能犯的任何错误,关闭一些变量并防止它被GC,但它似乎与Chrome的事件系统的实现有关

有没有人碰到这样的事情,或看到内存泄漏与内容脚本的极长期扩展与bg页面喋喋不休?

我的Content-Script方面的代码:

  csToBg = function(message) {
    var csToBgResponseHandler = function(response) {
      console.log("Got a response from bg");
      };

    var result = chrome.extension.sendMessage(null, message, csToBgResponseHandler)
  };
Run Code Online (Sandbox Code Playgroud)

在背景页面,一个简单的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);
}
Run Code Online (Sandbox Code Playgroud)

以这种方式在Chrome 23.0.1271.97中发送~200k消息后,堆快照如下所示: 堆快照

在页面的生命周期中,内存似乎永远不会被回收,我对如何修复它感到难过.

编辑:这是一个标准的背景页面,不是一个活动页面.

luk*_*sch 2

这可能在 chrome 32 中已修复。

最后!

有关详细信息,请参阅http://code.google.com/p/chromium/issues/detail?id=311665