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

Dan*_*ohn 5 jquery

我正在开发一个使用Prototype编写的网站,但我们正在逐步将其转换为jQuery.很多页面更新都是通过Prototype的Ajax.Updater完成的.但是,有时Prototype删除和替换的元素已经运行了jQuery小部件,因此$ .cache引用了小部件创建的其他元素.由于jQuery没有删除DOM,因此当它们被删除时,它没有机会从$ .cache中清除这些元素的数据,最终导致内存泄漏.有没有办法告诉jQuery检查它的$ .cache并丢弃不再在DOM中的元素的任何数据?

kar*_*m79 3

听起来有点棘手 - 特别是因为 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);
Run Code Online (Sandbox Code Playgroud)