Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在元素上使用jQuery.data()然后通过直接DOM操作删除该元素是否会泄漏内存_Jquery - Fatal编程技术网

在元素上使用jQuery.data()然后通过直接DOM操作删除该元素是否会泄漏内存

在元素上使用jQuery.data()然后通过直接DOM操作删除该元素是否会泄漏内存,jquery,Jquery,我在一个使用Prototype编写的站点上工作,但我们正在将其分阶段升级到jQuery。很多页面更新都是通过Prototype的Ajax.Updater完成的。然而,有时Prototype删除和替换的元素上运行了jQuery小部件,因此$.cache引用了小部件创建的其他元素。由于jQuery没有执行DOM删除,因此在删除这些元素时,它没有机会从$.cache中清除这些元素的数据,最终导致内存泄漏。有没有办法告诉jQuery检查它的$.cache并丢弃DOM中不再存在的元素的任何数据?听起来有点

我在一个使用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);

因为我们已经开始运行Prototype的定制版本,所以我刚刚更新了Prototype Object.remove和Object.update函数,以便在存在jQuery的情况下使用jQuery删除元素,从而保证数据清理。我不想编写jQuery更新程序,因为Prototype的Ajax.updater在我们的代码中有太多地方被使用,无法在合理的时间内完全替换和测试。