我可以使用iframe来解决内存泄漏吗

Can i use iframe to solve memory leak?

本文关键字:内存 泄漏 解决 可以使 iframe 我可以      更新时间:2023-09-26

我使用的是一个非常复杂和压缩的js库,它创建了一个结构复杂的对象,其中运行了很多事件和间隔。我觉得它的函数destroy()坏了,东西还在运行,内存被占用,这会导致内存,并使网站在移动等较弱的设备中崩溃。

由于我无法修复函数destroy(),我正在考虑是否有一种方法可以有效地删除整个对象。我能用iframe做那个吗?如何?如果父html创建了一个iframe并将此复杂对象存储在iframe内容中,那么当iframe加载另一个网页时,网站是否会删除整个对象?

您的问题非常笼统,所以我们所能做的就是非常笼统地回答。

是的。删除一个iframe或在其中加载一个新文档将从原始iframe文档中释放整个Javascript和DOM上下文。唯一可以持久存在的东西是写入LocalStorage的东西或放入cookie的东西。常规的Javascript和DOM上下文将被清理(在任何行为良好的浏览器中)。

我应该补充一点,释放这些资源使用的内存不一定会将所有内存返回到操作系统,但它至少可以在浏览器中自由重用,并且应该防止内存随着时间的推移而积累(由于该资源)。内存何时返回操作系统完全取决于操作系统内部和该操作系统上的特定浏览器设计(以及它们如何管理内存)。

感觉用它来解决内存泄漏(虽然可能可行)是一个巨大的黑客攻击,甚至可能不是解决问题的最佳方法。但是,由于您基本上没有分享任何关于问题实际原因的细节,我们无法真正深入探讨解决您特定问题的更好选择。

感觉如果你足够清楚是什么导致了泄漏,并将其转移到另一个iframe,那么你可能只需要直接修复泄漏。现代浏览器非常善于处理由错误引起的泄漏,所以你认为你看到的任何泄漏都可能只是你的代码积累了某种对象,而不是发布对它的引用,这样它就可以被垃圾收集。

我建议你问一个关于如何修复内存泄漏的不同问题,并尽可能多地包括你所知道的内容和代码如何工作的细节(包括实际代码),最坏的情况是,你会得到一些关于如何进一步追踪泄漏内容的建议。充其量,人们可以就如何实际修复泄漏向您提供建议。

如果javascript不使用localstorage或。。cookie,那么一旦页面中的javascript不再存在(例如,您将页面更改为另一个iframe中没有javascript的页面),javascript就不会有任何效果。

难道你不能重新定义"对象",或者显示一些代码,这样我们就可以帮助解决"destroy()"或"内存"问题和间隔吗。Javascript不会像C++那样导致"内存泄漏",所以它可能更像是循环中的太多操作?