使用AJAX JSON调用时内存泄漏
Memory leaks when using AJAX JSON call
在我的javascript应用程序中,当使AJAX
调用检索JSON
对象时,我有很大的内存泄漏。代码真的很简单:
function getNewMessage()
{
new_message = []; // this is global variable
var input_for_ball = [];
var sum;
var i;
var http = new XMLHttpRequest();
http.open("GET", url + "/random_ball.json", false);
http.onreadystatechange = function()
{
if(http.readyState === 4 && http.status === 200)
{
var responseTxt = http.responseText;
input_for_ball = JSON.parse('[' + responseTxt + ']');
}
}
http.send(null);
new_message = input_for_ball;
}
每1毫秒调用一次,正如您所看到的,它是同步调用。这个函数每1秒花费1MB。
当我使用而不是AJAX
只是分配给变量,如:
input_for_ball = JSON.parse('[0,0,0,0,0,0,0,0,0,0]');
那么一切都完美了。所以错误一定是在我实现AJAX
调用。当我使用jQuery AJAX
调用时也发生了这种情况。
更新12/03/2013
正如Tom van der Woerdt
下面提到的,这确实是预期的行为。因此,正如Matt B.
建议的那样,我重写了一些代码,使异步调用成为可能,这很有帮助。现在我的应用程序内存消耗是稳定的和小的。
我不认为是AJAX调用,而是闭包占用了内存。您的onreadystatechange函数引用http对象(因此对该对象的引用将与匿名函数一起保存)。
我认为你的代码匹配示例1在这个链接http://www.ibm.com/developerworks/web/library/wa-memleak/模式
如果你以前没有在javascript中遇到过闭包,那么它们非常值得一读——理解它们可以解释很多乍一看似乎没有意义的行为。
相关文章:
- 重复应用 d3 转换导致的内存泄漏
- IE7中的blockUI插件内存泄漏25kb
- Javascript闭包-如何防止内存泄漏
- jQuery Draggable:内存泄漏
- "检测到可能的EventEmitter内存泄漏”;使用Gulp+Watchify+Factor捆绑包
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- 是内存泄漏
- 将处理程序留在img.onload上是内存泄漏
- 具有并发sse连接的node.js内存泄漏
- 简单对象的Javascript内存泄漏
- WeakMap是否会将我从父/子关系的内存泄漏中拯救出来
- Javascript绘制画布内存泄漏
- Node.js”;检测到EventEmitter内存泄漏”;
- 正在清理内存泄漏
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- Angular JS$编译服务导致$watch内存泄漏
- 如何防止和防范闭包内存泄漏
- 跟踪 JavaScript 内存泄漏的工具
- 页面刷新后javascript内存泄漏有问题吗?为什么?
- XMLHttpRequest循环内存泄漏