jquery - jquery.html 的垃圾收集

标签 jquery dom memory

我想知道以下代码是否会导致内存泄漏等问题

<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 对象从内存中释放。

打开页面之前

alt text

打开页面后(已立即释放23000个HTMLElement对象,剩余约27000个)

alt text

不到一秒后(除了 1 个之外,所有 27000 个对象都被释放)

alt text

关于jquery - jquery.html 的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3623697/

相关文章:

javascript - 选择 2 : Getting formatSelection to have a certain context

javascript - 更改 contenteditable div HTML 并将光标移动到末尾不起作用

javascript - 将鼠标悬停在一个 div 上以显示某个类的最近 div

javascript - 如何在不触发 JSHint 的困惑语义错误的情况下在 JavaScript 的循环中添加 eventListeners?

javascript - 空数组与 undefined variable 的内存开销?

python - 读取大 CSV 后跟 `.iloc` 切片列时出现 Pandas MemoryError

c - 读取结构中的数组会导致段错误

javascript jquery IE 中的每个问题

javascript - 如何将dom元素传递给javascript函数?

javascript - Google maps API,根据id显示和隐藏标记