Kei*_*rup 7 javascript memory jquery dom memory-leaks
我应该将每个data()调用与稍后的removeData()调用配对吗?
我的假设:jQuery的remove()将从DOM中删除元素,如果我没有任何其他删除引用,我不需要再做任何清理.
但是,如果我有一些javascript var或object引用其中一个元素被删除,我需要清理它,我假设它也适用于jQuery的数据函数,因为它以某种方式引用元素.
因此,如果我确实需要在删除之前调用removeData,是否有删除与元素关联的所有数据的快捷方式,或者我必须通过名称显式调用每个数据?
编辑:我查看了源代码并确认了Borgar和roosteronacid所说的内容.删除从dom中取出元素并删除与它们一起存储的任何事件和数据 - 这很方便,但让我想知道何时使用removeData().可能不经常.
Bor*_*gar 14
jQuery的数据没有保留对元素的引用,因此您不必担心内存泄漏.其预期目的是解决这个确切的问题.
略微简化其工作原理:
将id成员添加到每个"触摸"的DOM节点.涉及该DOM元素的所有后续操作都使用该id.
var theNode = document.getElementById('examplenode');
theNode[ 'jQuery' + timestamp ] = someInternalNodeID;
Run Code Online (Sandbox Code Playgroud)
您可以使用jQuery使用的相同函数访问id:
someInternalID = jQuery.data( document.body );
Run Code Online (Sandbox Code Playgroud)
将数据附加到节点时,它会将数据存储在jQuery对象上,并在节点的内部标识下进行归档.您在$(element).data(key,value)
内部翻译为:
jQuery.cache[ someInternalNodeID ][ theKey ] = theValue;
Run Code Online (Sandbox Code Playgroud)
一切都进入相同的结构,包括事件处理程序:
jQuery.cache[ someInternalNodeID ][ 'events' ][ 'click' ] = theHandler;
Run Code Online (Sandbox Code Playgroud)
删除元素后,jQuery可以通过一个简单的操作丢弃所有数据(和事件处理程序):
delete jQuery.cache[ someInternalNodeID ];
Run Code Online (Sandbox Code Playgroud)
从理论上讲,您也可以删除jQuery而不会从任何引用中发生泄漏.jQuery甚至支持库的多个独立实例,每个实例都拥有自己的一组数据或事件.
您可以在"The DOM Is a Mess"演示文稿中看到John Resig解释这些内容.
归档时间: |
|
查看次数: |
2509 次 |
最近记录: |