【问题标题】:Memory management : removing the container of a jquery object (plugin)内存管理:删除 jquery 对象的容器(插件)
【发布时间】:2012-06-14 09:57:14
【问题描述】:

我只想确认我在我的应用中正在做什么。

我创建了一些 jquery 插件,它们在我的页面的 DOM 中添加了一些元素和事件。

例如,我在页面的 DOM 元素中初始化插件:

$("#myplugin_container").myplugin('init', {'data':mydata});

我想知道的:如果我用删除功能删除容器

$("#myplugin_container").remove();

,我会在插件上有内存泄漏,还是会正确删除 jquery 对象?

我希望我的解释清楚......

谢谢!

【问题讨论】:

  • ...这取决于插件中的代码(例如,您放置元素的范围和您提供给它的数据)。如果您存储其本地元素的所有设置和数据(例如通过.data()),则它们很有可能没有泄漏。但是,如果您出于某种原因将元素和数据存储在另一个范围内(例如,在持久数组中),那么即使在您调用 .remove() 之后,对它的引用也会保留,因此内存将“leak”(用 JavaScript 术语)。
  • 在我的插件中,我将数据存储在一个数组中。因此,您对丢失对该数组的引用当然是正确的。我将使用 .data()。谢谢

标签: jquery memory jquery-plugins plugins memory-leaks


【解决方案1】:

当您使用 .remove() 时,jQuery 将删除所有事件处理程序和与该元素关联的其他数据,因此不应该有任何内存泄漏。

来自 jQuery documentation 的 remove():

与 .empty() 类似,.remove() 方法将元素从 DOM 中取出。当您想要删除元素本身以及其中的所有内容时,请使用 .remove()。除了元素本身,所有与元素关联的绑定事件和 jQuery 数据都将被删除。要删除元素而不删除数据和事件,请改用 .detach()。

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2015-11-01
    • 2023-03-29
    • 1970-01-01
    • 2011-08-10
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多