jQuery Ajax中的内存泄漏

时间:2012-09-19 13:42:11

标签: jquery callback google-visualization

我遇到了jQuery.ajax()的内存泄漏问题。我已按照herehere的建议,但仍然看到内存泄漏。我本质上是在尝试用我自己的API替换Google Visualization API,因为GV API也会泄漏内存。这是我的代码片段:

RiseVision.Common.Visualization.Query = function(url) {
    this.baseURL = url + "&tqx=responseHandler:setResponse";
    this.url = this.baseURL;
}
RiseVision.Common.Visualization.Query.prototype.send = function(callback) {
    var self = this;

    this.callback = callback;
    this.hasResponded = true;
    this.timerID = setInterval(function() {
        if (self.hasResponded) {
            self.hasResponded = false;
            self.sendQuery();
        }
    }, this.refreshInterval);
}
RiseVision.Common.Visualization.Query.prototype.sendQuery = function() {
    var request = $.ajax({ 
        url: this.url,
        context: this,
        jsonpCallback: "setResponse",
        dataType: "jsonp",
        success: function(json) {
            var response = new RiseVision.Common.Visualization.QueryResponse(json);

            if (json.sig != null) {
                this.url = this.baseURL + ";sig:" + json.sig;
            }

            if ((response.getStatus() == "error") && (response.getReasons() == "not_modified")) {
            }
            else {
                this.callback(response);
            }

            response = null;
            this.hasResponded = true;
        }
    });

    //This is supposed to mitigate the memory leak.
    request.abort = null;
    request = null;
}

我正在使用jQuery 1.8。 refreshInterval是1秒,因为它正在提取实时数据。我在Chrome的任务管理器中看到的是内存的逐渐增加。大约5分钟后,垃圾收集似乎开始并且内存下降。问题是内存没有下降到它开始的同一水平。例如,内存从50K开始,然后逐渐增加到60K,然后垃圾收集开始,内存下降到52K。现在它增加到62K,然后下降到54K。等等。最终,这将使浏览器崩溃。

我尝试过setTimeout而不是setInterval。这似乎更糟糕。我已经尝试将成功处理程序放入其自己的函数中。没有帮助。

这是一个解释问题的方法 - http://jsfiddle.net/aADXq/7/

有任何建议吗?

THX。

1 个答案:

答案 0 :(得分:0)

将ajax请求中的dataType更改为“text”,然后使用json_parse.js解析生成的字符串。这个库递归地解析json而不使用eval,这就是你的记忆。