我想知道以下代码是否会导致内存泄漏等问题
<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>
最佳答案
在每次迭代中都会创建一个简单的跨度。 jQuery 中的 html()
函数运行一个内部 cleanData
函数从所有包含的节点中删除关联的数据和事件,但这里的情况并非如此。
然后 jQuery 设置 innerHTML属性传递给释放现有元素的字符串。浏览器的垃圾收集器会尽可能地回收该内存。这段代码根本没有泄漏。 Chrome 释放内存的速度实际上非常快。我看到从 2.421MB 下降到 748KB,主要是因为在 3 秒内释放了跨度元素。
它不会等待页面卸载来释放该内存。这三个快照的间隔不到一秒,其中几乎 26000 个 HTMLElement
对象从内存中释放。
打开页面之前
打开页面后(已立即释放23000个HTMLElement对象,剩余约27000个)
不到一秒后(除了 1 个之外,所有 27000 个对象都被释放)
关于jquery - jquery.html 的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3623697/