我想知道以下代码是否会导致内存泄漏等问题
<html>
<head>
<script type='text/javascript' src='jquery-1.4.2.js'> </script>
<script type="text/javascript">
function a(){
for(var i = 0; i < 50000; i++){
$("#d").html("<span>" + i + "</span>");
}
}
</script>
</head>
<body onload='a();'>
<div id="d"></div>
</body>
答案 0 :(得分:3)
在每次迭代中都会创建一个简单的范围。 jQuery中的html()
函数运行一个内部cleanData
函数,该函数从所有包含的节点中删除关联的数据和事件,但这不是这里的情况。
然后jQuery将innerHTML属性设置为传入的字符串,该字符串释放现有元素。这取决于浏览器的垃圾收集器尽可能地回收内存。这段代码根本没有泄漏。 Chrome实际上在释放内存方面非常快。我看到从2.421MB到748KB的下降主要来自在3秒内发布的跨度元素。
它不会等待页面卸载以释放此内存。这三个快照的间隔时间不到一秒,其中从内存中释放了近26000个HTMLElement
个对象。
在打开页面之前
打开页面后(立即释放了23000个HTMLElement对象,剩余约27000个)
不到一秒钟之后(除1之外的所有27000个对象都被释放)
答案 1 :(得分:1)
它将使用内存(可能是兆字节或2的数量级),但它不会泄漏它。
当页面关闭时,应该恢复内存。
我在Firefox的 Dirty 实例上的结果:
Memory used (allow several seconds to settle)
-----------------------------------------------
Before opening page: 163,332K
Open and page finished: 164,932K (temporarily spiked to about 210M)
After page closed: 163,668K
请注意,略有差异可能是许多其他标签之一,或者它可能是Firefox着名的内存泄漏,但它可能不 JS代码。