我正在开发一个移动优化网站,其中包含一个图库,在网页上有很多(在某些情况下为1oo +)图像。
我认为有很多图像可能会导致移动设备崩溃,所以我创建了一个函数,定期检查页面中是否有超过给定数量的img元素,如果有,请从DOM中删除一些.empty().remove();
页面仍然在Ipod 3G上的某些点上崩溃(只有可用于测试atm的移动设备)所以我问,如果从dom中删除<img>
元素,是否会清除内存浏览器?
答案 0 :(得分:3)
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;
},
答案 1 :(得分:0)
这里最安全的赌注是前面讨论的Node.removeChild方法;但是内存分配由Javascript垃圾收集器控制,你不能清理&#34;按需。
因此,通常您的目标已实现,但如果您在垃圾收集有机会取消引用已删除的dom元素之前达到内存限制,则该页面可能会使浏览器崩溃。
&#34;假设您的代码没有在其他地方保留对该节点的任何其他引用,它将立即变得无法使用且无法恢复,并且在短时间后通常会从内存中automatically deleted&#34;