我反复通过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);
}