【问题标题】:Does removing an Iframe from the DOM free up all the resources it consumed in the Browser?从 DOM 中删除 iframe 是否会释放它在浏览器中消耗的所有资源?
【发布时间】:2017-02-17 03:08:15
【问题描述】:

我正在构建一个媒体管理器库,它将在弹出模式窗口中打开。

媒体管理器有大约 20-30 个插件,它们都有自己的一组依赖的 3rd 方 JavaScript 库。

现在,当媒体管理器打开时,随着越来越多的插件被加载到媒体管理器库中,所有插件都根据需要加载到自己的第三方库中,这将消耗越来越多的浏览器资源和内存。

1) 有没有办法根据需要加载和卸载 JavaScript 库?

2)
如果我要更改 Media Manger 库模态窗口以加载到 Iframe 中,然后我可以在模态窗口关闭时从 DOM 中删除它,这是否会释放它已加载到该 Iframe 中的所有第 3 方库和插件?

【问题讨论】:

  • 您不能“卸载”脚本。在观察资源监视器的同时测试您的 iFrame 想法,以查看对内存、交换等的影响。在不同平台上的不同实现中,您可能会得到不同的结果。

标签: javascript iframe


【解决方案1】:

1) 无法按需卸载特定的 JavaScript 库。如果您认为这是必要的,您应该重新考虑您的设计。但是,您可以清除 localStorage,这将清除所有缓存的脚本和样式(如果它们存储在那里)以及其他 html5 资源。

window.localStorage.clear();

2) 当你清除一个 iframe 时,它​​确实会将它使用的资源返回给浏览器,it is easily testable。但是it is recommended,您在删除 iframe 之前刷新它,以帮助确保正确返回大部分资源。

$('iframe')[0].contentWindow.location.reload();
setTimeout(function(){
    $('iframe').remove();
}, 1000);

【讨论】:

    【解决方案2】:

    请记住,如果您将任何事件处理程序或任何类型的引用附加到 iframe,则必须取消对它的引用,以便您的 iframe 在从 dom 中删除时可以进行垃圾回收。

    关于here 的详细讨论。 (虽然这个问题涉及骨干模型,但答案通常讨论 JavaScipt 垃圾收集。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      相关资源
      最近更新 更多