【发布时间】:2012-12-15 21:25:37
【问题描述】:
我在使用 Chrome 的 chrome.extension.sendMessage() 的长期页面中看到相当 大量 内存泄漏
在将 ~200k 事件从 Content-Script 发送到 Background-Page 作为测试后,chrome.Event 的保留大小是 ~50MB 堆快照中保留内存的 ~80%
我一直在试图追踪我可能犯的任何错误,关闭一些变量并防止它被 GC'd,但这似乎与 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 中发送约 20 万条消息后,堆快照如下所示:
内存似乎永远不会在页面的生命周期内被回收,我不知道如何修复它。
编辑:这是标准背景页面,不是活动页面。
【问题讨论】:
-
windows中的结果比上面最差!
-
首先,值得一提的是,200K 事件似乎不是单个消息的预期用例。相反,应该使用long-lived 连接。也许这可以降低内存消耗。也尝试更改您的代码:
var response = {};,加上可能是delete message;。我已经对这些更改进行了一些测试,它在快照中看起来更好,但需要进一步的验证和确认。 -
I've had this is issue before,应该修复了。奇怪的是这又出现了,尝试报告新的错误报告吗? (或重新打开我的旧的)
标签: google-chrome google-chrome-extension google-chrome-devtools