微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用AJAX JSON调用时内存泄漏

在我的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对象(因此对匿名函数的引用将保留).
我认为您的代码与此链接http://www.ibm.com/developerworks/web/library/wa-memleak/中的示例1中的模式匹配

如果你以前没有在javascript中遇到过闭包,那么它们非常值得阅读 – 理解它们会解释很多乍一看似乎没有意义的行为.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐