我正在开发一个使用 Prototype 编写的网站,但我们正在将其逐步转向 jQuery。很多页面更新都是通过Prototype 的Ajax.Updater 完成的。然而,有时 Prototype 删除和替换的元素已经在其上运行了 jQuery 小部件,因此 $.cache 引用了该小部件创建的其他元素。由于 jQuery 没有执行 DOM 删除操作,因此在删除这些元素时,它没有机会从 $.cache 中清除这些元素的数据,最终导致内存泄漏。有没有办法告诉 jQuery 检查它的 $.cache 并丢弃不再在 DOM 中的元素的任何数据?
最佳答案
听起来有点棘手 - 特别是因为 Ajax.Updater 是 Ajax.Request 的特化,它没有有 onsuccess/oncomplete 回调,这意味着您可能必须定期检查缓存等。这听起来比创建 jQuery“更新程序”要更多的工作。
如果您愿意用 jQuery 重写来替换更新程序,这个问题就会完全消失,并且肯定比解决它更简单。 jQuery 中的简单“更新程序”如下。
function update() {
$.ajax({
type: 'get',
url: 'theContent.html',
success: function(text) {
// .html calls '.cleanData()' internally. No need to do anything else.
$('#updateMe').html(text);
}
});
}
var i = setInterval(update, 5000);
关于jquery - 在元素上使用 jQuery .data() 然后通过直接 DOM 操作删除该元素是否会泄漏内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693673/