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