[英]Does removing an element (a img) from the DOM with jquery clear the memory allocated?
我正在开发一个移动优化的网站,该网站有一个画廊,页面上有很多(在某些情况下为 1oo+)图像。
我认为有这么多图像可能会导致移动设备崩溃,所以我创建了一个函数来定期检查页面中是否有超过给定数量的 img 元素,如果是,则使用.empty().remove();
该页面在 Ipod 3G(仅可用于测试 atm 的移动设备)上的某些点仍然崩溃,所以我问,如果我从 dom 中删除<img>
元素,是否会为浏览器清除内存?
https://developer.mozilla.org/En/DOM/Node.removeChild
“被移除的子节点仍然存在于内存中,但不再是 DOM 的一部分。......”
jQuery源代码:
// keepData is for internal use only--do not document
remove: function( selector, keepData ) {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
jQuery.cleanData( [ elem ] );
}
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
}
return this;
},
empty: function() {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
// Remove element nodes and prevent memory leaks
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
}
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild );
}
}
return this;
},
这里最安全的选择是如前所述的Node.removeChild方法; 但是内存分配是由 Javascript 垃圾收集器管理的,你不能按需“清理”。
因此,通常您的目标已实现,但如果您在垃圾收集有机会取消引用已删除的 dom 元素之前达到内存限制,则页面可能会导致浏览器崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.