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

时间:2012-12-15 21:25:37

标签: 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)
  };

在背景页面上,一个简单的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中发送~200k消息后,堆快照如下所示:heap snapshot

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

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

1 个答案:

答案 0 :(得分:1)

这可能已在chrome 32中修复。

最后!

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