在元素上使用jQuery.data()然后通过直接DOM操作删除该元素是否会泄漏内存
我在一个使用Prototype编写的站点上工作,但我们正在将其分阶段升级到jQuery。很多页面更新都是通过Prototype的Ajax.Updater完成的。然而,有时Prototype删除和替换的元素上运行了jQuery小部件,因此$.cache引用了小部件创建的其他元素。由于jQuery没有执行DOM删除,因此在删除这些元素时,它没有机会从$.cache中清除这些元素的数据,最终导致内存泄漏。有没有办法告诉jQuery检查它的$.cache并丢弃DOM中不再存在的元素的任何数据?听起来有点棘手,特别是因为Ajax.Updater是Ajax.Request的专业化,它没有onsuccess/oncomplete回调,这意味着您可能需要定期检查缓存,除其他外。这听起来比创建jQuery“更新程序”要复杂得多 如果您愿意用jQuery重写来替换更新程序,那么这个问题将完全消失,并且肯定比解决它更简单。jQuery中的简单“更新程序”如下所示在元素上使用jQuery.data()然后通过直接DOM操作删除该元素是否会泄漏内存,jquery,Jquery,我在一个使用Prototype编写的站点上工作,但我们正在将其分阶段升级到jQuery。很多页面更新都是通过Prototype的Ajax.Updater完成的。然而,有时Prototype删除和替换的元素上运行了jQuery小部件,因此$.cache引用了小部件创建的其他元素。由于jQuery没有执行DOM删除,因此在删除这些元素时,它没有机会从$.cache中清除这些元素的数据,最终导致内存泄漏。有没有办法告诉jQuery检查它的$.cache并丢弃DOM中不再存在的元素的任何数据?听起来有点
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);
因为我们已经开始运行Prototype的定制版本,所以我刚刚更新了Prototype Object.remove和Object.update函数,以便在存在jQuery的情况下使用jQuery删除元素,从而保证数据清理。我不想编写jQuery更新程序,因为Prototype的Ajax.updater在我们的代码中有太多地方被使用,无法在合理的时间内完全替换和测试。