如何在JavaScript中创建内存泄漏并监视内存使用情况

Wat*_*lla 8 javascript memory-leaks

我正在尝试使用以下代码片段在JavaScript中分配内存,以研究内存泄漏/消耗情况。然而

performance.memory.usedJSHeapSize 
Run Code Online (Sandbox Code Playgroud)

总是显示相同的数字,在我的情况下为10000000。即使动态创建元素并附加到DOM,该数字怎么也不会改变?

我需要一个JavaScript代码段来创建内存泄漏并动态使用performance.memory.usedJSHeapSize(或其他任何存在的函数)来监视其使用情况。

我尝试了这段代码,但performance.memory.usedJSHeapSize仍然为10000000:

<body>
    <p id="memory" style="position: fixed; top:10px; left:10px"></p>
<script>

    setInterval(() => {
        document.getElementById("memory").innerHTML = performance.memory.usedJSHeapSize
    }, 300);
     btn = [];
    let i = 0;
    setInterval(() => {
        for (let j = 0; j < 1000; j++) {
            ++i;
            let k=i;
            btn[k] = document.createElement("BUTTON");
            document.body.appendChild(btn[k]);
            btn[k].innerHTML = k;
            btn[k].addEventListener("click", function () {
                alert(k);
            });
        }
    }, 5000);
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

我已经在这篇文章中厌倦了2013年给出的示例,但是这个示例也不再造成内存泄漏。

如何在JavaScript中造成内存泄漏?

Lef*_*ium 1

performance.memory.usedJSHeapSize直接从本地文件系统打开页面时不会更新。

下图显示从问题复制粘贴的完全相同的代码显示在本地主机访问时内存使用量增加:

证明

或者,您可以自己检查:https://memory-leak.surge.sh/simple/(您也可以检查原始代码:https://memory-leak.surge.sh/,但您的浏览器可能会冻结,如果保持打开状态超过几秒钟。)


如何像上面那样托管 HTML:

最简单的选择是使用BrowsersyncParcel 等开发工具。这些工具可让您从本地文件系统打开文件,就像它们是从具有http://localhost:1234/这样的 URL 的服务器托管的一样。(因为您的计算机上启动了临时 Web 服务器。)

另一种选择是将文件实际托管在服务器上。有很多选项可以做到这一点:

  • Surge我在上面的例子中使用的工具
  • Glitch(这个很酷,因为您可以在线编辑文件并立即看到更改)
  • Github 页面

注意:结果可能因浏览器/硬件而异。我的环境:

  • Chrome 版本 74.0.3729.131(官方版本)(64 位)
  • Windows 10