Javascript 使用jQuery/.data()避免内存泄漏

Javascript 使用jQuery/.data()避免内存泄漏,javascript,jquery,dom,Javascript,Jquery,Dom,我正在使用jQuery动态创建HTML元素,现在需要针对它们存储JavaScript数据。然而,我现在担心内存泄漏,因为我从来没有在我的对象上调用过“remove”。I“.append”和“.detach”它们,但决不“.remove”。jQuery的文档似乎建议我调用remove来清理它在对象上的足迹——事件、数据等 这在现代浏览器上是绝对必要的吗,或者对元素引用的消失会对我起作用吗 用另一种方式表达我的问题;此脚本片段是否泄漏内存 function createElement() {

我正在使用jQuery动态创建HTML元素,现在需要针对它们存储JavaScript数据。然而,我现在担心内存泄漏,因为我从来没有在我的对象上调用过“remove”。I“.append”和“.detach”它们,但决不“.remove”。jQuery的文档似乎建议我调用remove来清理它在对象上的足迹——事件、数据等

这在现代浏览器上是绝对必要的吗,或者对元素引用的消失会对我起作用吗

用另一种方式表达我的问题;此脚本片段是否泄漏内存

function createElement()
{    
    var newDiv = $("<div>")
       .data("test", "test data")
       .appendTo(document.body)
       .detach();

    setTimeout(createElement, 10);
}

createElement();
函数createElement()
{    
var newDiv=$(“”)
.数据(“测试”、“测试数据”)
.appendTo(document.body)
.detach();
setTimeout(createElement,10);
}
createElement();
就这一点而言,即使没有.data()调用,它也会泄漏内存吗

我对支持非常旧的浏览器不感兴趣。基本上是IE9和更好。

From:“jQuery.data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素,从而避免循环引用和内存泄漏。我们可以一次或作为一个集合检索单个元素的多个不同值。”


另外,不要忘记,您可以使用HTML5 data-*属性来存储数据。

您可以使用浏览器的开发工具来监控页面使用的内存。在Chrome中,它位于“Timeline”下。jQuery创建一个在内部调用$.cache的对象,这是存储与.data()附加的所有数据的地方,元素本身只获得一个新属性,该属性包含一个ID,该ID用作$.cache对象检索数据的键。因此,jQuery的remove()将删除存储在$.cache中的所有数据,并删除所有事件处理程序,并尽最大努力清理您造成的所有混乱。detach()显然不能做到这一点,因为这是保持与元素关联的所有数据的关键。通常情况下,您根本不必担心这一点,因为它不像旁注那么大,data()以这种方式工作,以确保它不会泄漏内存或导致循环引用问题。不,数据不会在现代浏览器(或旧浏览器)中消失,因为它是由jQuery内部存储在特殊对象中的。谢谢。似乎我想这样做的方式会泄漏,但我可以使用data()解决。您知道调用detach()而不是remove()是否会导致任何其他内存问题吗?.detach()方法与.remove()相同,只是.detach()保留所有与已删除元素关联的jQuery数据。当删除的元素稍后要重新插入DOM时,此方法非常有用。