添加/删除 IFrame 时 IFrame 内存泄漏

Kyl*_*le 7 javascript safari iframe memory-leaks internet-explorer-11

我有以下 HTML 可以重现我看到的问题。随着我随着时间的推移添加/删除 IFrame,浏览器永远不会释放 IFrame 内存。因此,内存会随着时间的推移而增长,从而导致性能下降。我已经在 Safari/IE11/Edge 上看到了这种影响,而 Firefox/Chrome 处理得更好。有没有人有关于如何规避 IFrame 内存泄漏的任何提示?

<html>
<body>
<button onclick="add()">ADD</button>
<button onclick="remove()">REMOVE</button>
    <script>
  function add() {
    var ifrm = document.createElement('iframe');
    ifrm.setAttribute('id', 'ifrm');
    ifrm.setAttribute('src', 'http://somewebsite.com');
    document.body.appendChild(ifrm);
  }
  function remove() {
    document.body.removeChild(document.getElementById('ifrm'));
  }
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

小智 1

尝试以下操作:

  1. 将 iframe url 设置为空白页,例如“”;
  2. 破坏页面的引用,这些引用可能引用 iframe 页面的对象;
  3. 将 iframe 页面创建的所有对象设置为 null 或未定义。

只有iframe的页面是自己开发的,才可以进行操作2和3。

如果你执行了1和2,那么chrome将立即释放iframe页面分配的js堆。

如果你执行了 1、2 和 3,那么 Firefox 也会立即释放 js 堆。

但是,即使您执行了上述所有操作,Safari 在一段时间内也不会释放 js 堆。