Lea*_*yes 11 javascript jquery memory-leaks circular-reference
下面的代码会产生内存泄漏吗?
根据jQuery文档使用该data函数可以避免内存泄漏.确认以下是否安全将是有用的.
var MyClass = function(el) {
// Store reference of element in object.
this.element = $(el);
};
// Store reference of object in element.
$('#something').data('obj', new MyClass('#something'));
Run Code Online (Sandbox Code Playgroud)
显然,只要DOM元素仍然连接到DOM,代码就会占用额外的内存.但我猜你在询问DOM元素不再使用后是否会继续使用额外的内存.
更新:感谢Joey的回答(他已经删除了),我花了一些时间阅读javascript中的内存泄漏,看来我在下面段落中的假设是不正确的.因为DOM元素不使用纯垃圾收集,所以像这样的循环引用通常会阻止DOM元素和javascript对象被释放.但是,我相信这个答案的其余部分仍然是正确的.
如果没有深入了解javascript引擎如何实现垃圾收集,我就不能权威地谈论这个话题.但是,我对垃圾收集的一般理解使我认为你的代码是"安全的",因为在#something从DOM中删除元素之后,生成的MyClass对象只能引用一个没有其他连接的对象.垃圾收集器的图算法应该能够识别DOM元素及其MyClass对象是"浮动在空间中"并且与其他所有内容都没有关联.
此外,一旦从DOM中删除了与给定DOM元素相关联的数据和事件,jQuery就会不加考虑.从文档:
jQuery确保在通过jQuery方法删除DOM元素时以及当用户离开页面时删除数据.
因此,假设您始终使用jQuery,一旦从DOM中删除对象,您将只有一个单向引用,这使垃圾收集器更容易知道它可以摆脱这些对象.
因此,只要在MyClass删除DOM元素后没有其他引用该对象的内容,就不应该有内存泄漏.
| 归档时间: |
|
| 查看次数: |
1570 次 |
| 最近记录: |