【发布时间】:2013-03-14 15:56:26
【问题描述】:
我编写了一个聊天框小部件,它每秒运行一次 ajax 调用,以获取已发布的新消息。问题是它正在泄漏内存,并且仅在打开大约 15 分钟后,它就会使我的浏览器 (Firefox) 崩溃。
这可能是我,因为我是一个相对新手,我确定我错过了一些东西或者没有取消我的变量等。
var chat = {}
chat.fetchMessages = function() {
$.ajax({
url: '/chat_ajax.php',
type: 'post',
data: { method: 'fetch'},
success : function(data) {
$('#chat .messages').html(data);
$("#chat").scrollTop($("#chat")[0].scrollHeight);
}
});
}
chat.interval = setInterval(chat.fetchMessages, 1000);
chat.fetchMessages();
有人可以看看我的(基本)代码,看看你是否能发现内存泄漏发生在哪里,以及我做错了什么?我需要取消设置一些变量吗?
非常感谢!
【问题讨论】:
-
什么版本的jQuery?如果你包含 jQuery 1.9.1,它还会出现吗?旧版本的 jQuery 有一个内部缓存,用于存储简单的 html 字符串,然后当开发人员使用上述代码时,它会产生似乎是内存泄漏,因为缓存永远不会被清除。
-
我不明白的是 $('#chat .messages').html(data);你总是通过 AJAX 请求获得整个聊天内容吗?我认为您应该只请求用户尚未阅读的部分将其附加到.messages。否则数据最终将是一个巨大的文本。
标签: jquery ajax memory-leaks setinterval