我在使用 Chrome 的 chrome.extension.sendMessage() 的长期页面中看到相当大的内存泄漏
在将 ~200k 事件从 Content-Script 发送到 Background-Page 作为测试后,chrome.Event 的保留大小是 ~50MB 堆快照中保留内存的 ~80%
我一直在试图追查我可能犯的任何错误,关闭一些变量并防止它被 GC'd,但这似乎与 Chrome 事件系统的实现有关
有没有人遇到过这样的事情,或者看到内存泄漏与内容脚本的非常长寿命的扩展,与 bg 页面喋喋不休?
我的内容脚本端的代码:
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 中发送约 20 万条消息后,堆快照如下所示:
内存似乎永远不会在页面的生命周期内被回收,我对如何修复它感到困惑。
编辑:这是一个标准的背景页面,而不是一个事件页面。