我通过 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) 会导致更快的泄漏。我认为快速超时可能是罪魁祸首,所以我将它缩短到 250 毫秒,但这并没有帮助。