gpt4 book ai didi

javascript - 使用 jQuery 的 data() 应该注意什么样的内存泄漏?

转载 作者:IT王子 更新时间:2023-10-28 23:36:59 28 4
gpt4 key购买 nike

我应该将每个 data() 调用与以后的 removeData() 调用配对吗?

我的假设:jQuery 的 remove() 将从 DOM 中删除元素,如果我没有任何其他要删除的引用,我不必再做任何清理工作。

但是,如果我有一些 javascript var 或对象引用了被删除的元素之一,我需要清理它,并且我假设 这也适用于 jQuery 的数据函数, 因为它以某种方式引用元素。

因此,如果我确实需要在删除之前调用 removeData,是否有删除与元素关联的所有数据的快捷方式,还是我必须通过名称显式调用每个数据?

编辑:我查看了源代码并确认了 Borgar 和 roosteronacid 所说的话。 Remove 将元素从 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 甚至支持该库的多个独立实例,每个实例都拥有自己的一组数据或事件。

您可以在 the "The DOM Is a Mess" presentation 中看到 John Resig 解释这些内容。 .

关于javascript - 使用 jQuery 的 data() 应该注意什么样的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056098/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com