我使用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消息后,堆快照如下所示:
在页面的生命周期中,内存似乎永远不会被回收,而且我对如何修复它感到难过。
编辑:这是一个标准的背景页面,不一个活动页面。
答案 0 :(得分:1)