[英]Automatic web-page refresh memory leak using XMLHttpRequest
问候,
我一直在为使用8位微控制器的某些硬件开发Web界面。 该网页使用HTML,javascript,JSON和XHR(XMLHttpRequest)进行通信。 我想做的是创建一个页面,该页面使用setInterval使用控制器中的新值每250ms更新一次新值,以使网页“实时”更新,使用户感觉更像是一个应用程序。
我已经使其大部分工作了,但是发现在我测试过的两种浏览器(即IE和Chrome)中,代码中的某处都有内存泄漏。
我已经在网上进行了研究,似乎其他人也遇到了同样的问题,并且我尝试实施不同的修复程序都没有成功。
以下是一些代码快照,希望可以更好地说明问题。我修改了变量,使它们在没有看到完整应用程序的情况下更有意义。
// start the pageRefreshTimer to update values
var pageRefreshTimer = window.setInterval(updateValues, 250);
// Standard XHR opener
HTTP.getText = function(url, callback) {
var request = HTTP.newRequest(); // Searches array of standard XMLHttpRequest functions to try, code not shown...
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
callback(request.responseText) // responseText becomes JSONText below
}
}
request.open("GET", url);
request.send(null);
}
// Function that is constantly refreshed by HTML page to simulate real-time application
updateValues = function(parameter, value) {
newURL = newURL + "?" + parameter; // newURL is defined elsewhere in the code...
// Send the url and create the JSONObject
HTTP.getText(newURL, function(JSONText) {
var JSONObject = eval('(' + JSONText + ')'); // Specific notation for JSON
// Load object values into Javascript variables
Controller.detectorPosition = JSONObject.detectorPosition;
Controller.offset = JSONObject.offset;
Controller.actuatorPosition = JSONObject.actuatorPosition;
});
delete JSONObject; // My attempt at manual garbage collection, didn't resolve the memory leak
}
供您参考,将从微控制器发送到浏览器的JSON文件如下所示:
{ "offset": "1500",
"detectorPosition": "1558",
"actuatorPosition": "120" }
这看起来像代码中的“ closures”问题吗?
使用Chrome中的开发人员工具(Ctrl-Shift-J),我注意到应该对ParameterValues.json文件(大小为350B)进行多次调用,因为这是存储微控制器值的JSON对象; 但是浏览器是否以某种方式将每个页面存储/缓存在内存中?
我的评论中附有该问题的两个屏幕截图。 第二个是在XMLHttpRequest循环中设置断点的地方,在右侧的“关闭”面板中似乎有一个循环引用。 有人看到这个问题吗?
我该怎么做才能更深入地获取更多信息?
提前致谢!
有一个Google Code项目已经创建了XMLHttpRequest的跨浏览器实现。 他们还维护了一小列可能对您有用的XMLHttpRequest本机错误 。
以下错误似乎可能适用于您的情况:
错误:如果在onreadystatechange处理程序中对该实例或其他[sic] COM对象(例如DOM Node等)的引用,则XMLHttpRequest实例不会被垃圾回收,从而导致运行时内存泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.