我应该配对每个数据()用后removeData调用()调用?
我的假设:jQuery的remove()方法将删除从DOM元素,如果我没有任何其他的引用删除,我没有做任何更多的清理。
但是,如果我有一些javascript被删除VAR或对象指的是要素之一,我需要清理一下,和我假设应用到jQuery的数据功能,也因为它在某种程度上引用的元素。
所以,如果我确实需要删除之前调用removeData,有没有快捷方式删除与元素相关联的所有数据,或者我必须通过名称明确要求各?
编辑:我通过源代码看了一下,证实了Borgar和roosteronacid说。 拆下取出DOM的元素,并删除任何事件,并存储在他们的数据 - 这是方便,但让我不知道什么时候使用removeData()。 也许不常有。
jQuery的数据不保留对元素的引用,这样你就不用担心内存泄漏。 其预期的目的就是为了解决这个确切的问题。
它是如何工作的轻微简化:
的ID构件被添加到每个“接触” DOM节点。 涉及该DOM元素的后续操作使用该ID。
var theNode = document.getElementById('examplenode');
theNode[ 'jQuery' + timestamp ] = someInternalNodeID;
您可以使用相同的功能jQuery使用访问ID:
someInternalID = jQuery.data( document.body );
当您将数据追加到该节点它存储的jQuery对象上,该节点的内部ID提交下。 您的$(element).data(key,value)
内部转换为类似:
jQuery.cache[ someInternalNodeID ][ theKey ] = theValue;
一切都进入相同的结构,包括事件处理程序:
jQuery.cache[ someInternalNodeID ][ 'events' ][ 'click' ] = theHandler;
当一个元件被去除,jQuery的因此可以扔掉的所有数据(和事件处理程序)与一种简单的操作:
delete jQuery.cache[ someInternalNodeID ];
从理论上说,你可以因此也删除jQuery的,不得接受任何引用发生泄漏。 jQuery的甚至支持库的多个单独的实例,各持一组自己的数据或事件。
你可以看到约翰Resig的解释这个东西了“DOM是一个烂摊子”的演讲 。
jQuery的整点是从抽象蹩脚的JavaScript实现和错误在浏览器中..如内存泄漏掉:)
.. 对; 当该元素被从DOM除去所有相关联的数据,以一个元件将被去除。
总的来说,JavaScript是关于知道什么时候适合收集垃圾还算不错,除非你写的很大规模或长期运行的客户端应用程序,我会说涉及的内存主要是无关紧要的,并试图第二猜测它是不是会获得你很多。
确定哪些jQuery中未完成的词汇倒闭或其他棘手的JavaScript仍可能访问你给出的数据可能会在某些情况下,相当复杂。
据我所知,不过,如果你存储,无论你使用jQuery的数据功能得到了那就继续元素被删除后,所以去除引用的将是必要的,也是存在的参考。 一些简单的测试案例会给你一个更明确的答案。