Sun*_*how 3 html javascript iframe
我正在使用一个非常复杂和压缩的 js 库,它创建了一个结构复杂的对象,其中运行了大量的事件和间隔。我觉得它的函数 destroy() 被破坏了,事情仍在运行并且内存被保持,这导致内存并导致网站在移动设备等较弱的设备上崩溃。
由于我无法修复函数 destroy(),我在想是否有办法删除整个对象。我可以使用 iframe 来做到这一点吗?如何?如果父 html 创建一个 iframe 并将这个复杂对象存储在 iframe 内容中,那么当 iframe 加载另一个网页时,网站是否会删除整个对象?
你的问题非常笼统,所以我们真正能做的就是非常笼统地回答。
是的。删除 iframe 或将新文档加载到其中会从原始 iframe 文档中释放整个 Javascript 和 DOM 上下文。唯一可以持久化的内容是写入 LocalStorage 的内容或放入 cookie 的内容。常规的 Javascript 和 DOM 上下文将被清理(在任何表现良好的浏览器中)。
我应该补充一点,释放这些资源使用的内存不一定会将所有内存返回给操作系统,但它至少可以在浏览器中自由重用,并且应该防止内存随着时间的推移而积累(由于该资源) . 何时确切地将内存返回给操作系统完全取决于操作系统的内部结构和该操作系统上的特定浏览器设计(以及它们如何管理内存)。
感觉使用它来解决内存泄漏(虽然可能可行)是一个巨大的黑客,甚至可能不是解决问题的最佳方法。但是,由于您已经分享了有关实际导致问题的基本零细节,因此我们无法真正深入探讨解决您的特定问题的更好选择。
感觉就像如果您足够了解导致泄漏的原因以将其移动到另一个 iframe,那么您可能可以直接修复泄漏。现代浏览器对由错误引起的泄漏非常擅长,因此您认为您看到的任何泄漏都可能只是您的代码积累了某种对象而不是释放对它的引用,以便可以对其进行垃圾收集。
我建议你问一个关于如何修复内存泄漏的不同问题,并包含尽可能多的关于你所知道的和你的代码如何工作的细节(包括实际代码),最坏的情况是,你会得到一些关于如何进一步跟踪的建议下来什么泄漏。充其量,人们将能够建议您如何实际修复泄漏。