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

标签 javascript ajax json performance memory-leaks

在我的 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 调用时会发生这种情况。

2013 年 12 月 3 日更新

正如下面提到的Tom van der Woerdt,这确实是有意为之的行为。因此,正如 Matt B. 所建议的那样,我重写了一些代码以使异步调用成为可能,这很有帮助。现在我的应用程序内存消耗稳定且小。

最佳答案

我认为不是 AJAX 调用,而是闭包会占用您的内存。您的 onreadystatechange 函数引用了 http 对象(因此对此的引用将与匿名函数一起保留)。

我认为您的代码与此链接中示例 1 中的模式匹配 http://www.ibm.com/developerworks/web/library/wa-memleak/

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

关于javascript - 使用 AJAX JSON 调用时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15337374/

相关文章:

jquery - 无限滚动-如何延迟ajax请求?

json - 如何通过 Delphi 将产品、客户等发布到 WordPress WooCommerce 插件

json - 使用 Swift 2 的 Alamofire POST 请求

javascript - 如何在没有浏览器和 yslow/firebug 等工具的情况下使用 javascript 和 cookie 测量页面速度

javascript - 自定义 HTML5 音频 API : Uncaught TypeError: undefined is not a function

javascript - 将 Angularjs Protractor promise 从字符串转换为 float ?

javascript - 如何使用 Python/Flask/Jinja 将外部(跨域)JSON 加载到 D3.js 中?

php - 如何在没有超时的情况下通过ajax上传文件?

javascript - 如何从异步调用返回响应

ios - 无法从 JSON 对象中获取 NSString