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

标签 jquery

我正在开发一个使用 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/

相关文章:

jquery - 无法 Hook 表单提交事件

javascript - 制作位置 :absolute div relative after toggleFade()

jquery - 将文本对齐到 div Bootstrap 的底部

jquery - 仅打破长词 css Jquery

javascript - 为什么 Bootstrap 崩溃会自动折叠(收缩)元素?

使用 select2 进行重复值的 JavaScript 循环

javascript - 如何通过单击取消选中默认选中的单选按钮

javascript - 如果页面上有另一个元素,jQuery 向元素添加一个类

javascript - 如何在 HTML 中添加表单验证?

php - 使用用户名恢复用户信息 恢复 AJAX/PHP 中的输入