我反复通过AJAX调用从服务器获取JSON对象。随着时间的流逝,浏览器的内存使用量会增加(尝试使用Chrome,Safari和Firefox)。使用Chrome的堆快照,我发现时间戳字符串没有参考。如果我拍摄一系列快照,我会看到字符串的数量正在不断增加。

$(function() {
    var latestTimestamp = 0;

    function fetchData() {
        $.get("/parameter?format=json&since=" + latestTimestamp, gotData)
    }

    function gotData(data) {
        latestTimestamp = data['timestamp'];
        setTimeout(fetchData, 250);
    }

    fetchData();
});


其他说明:


我正在使用jQuery 1.7.1。编辑:刚尝试与1.6.2和1.4.2,相同的问题。
JSON对象中的timestamp实际上是整数,而不是字符串。那么累积的字符串可能是临时值?
从AJAX请求中删除+ latestTimestamp可以停止泄漏。
更快的setTimeout(20ms)导致泄漏更快。我以为快速超时可能是原因,所以我将其减少到250ms,但这没有帮助。

最佳答案

一旦完成了data []的处理,您就可以摆脱它:

function gotData(data) {
    latestTimestamp = data['timestamp'];
    delete data;
    setTimeout(fetchData, 250);
}

07-27 20:15