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

时间:2015-12-18 02:14:06

标签: javascript html iframe

我正在使用一个非常复杂且压缩的js库,它创建了一个复杂的结构化对象,其中包含大量事件和间隔。我觉得它的功能destroy()被破坏了,事情仍然在运行并且内存被保留,这会导致内存并使网站在像移动设备这样的较弱设备中崩溃。

由于我无法修复函数destroy(),我在想是否有办法删除现有的整个对象。我可以使用iframe吗?如何?如果父html创建iframe并将此复杂对象存储在iframe内容中,那么当iframe加载其他网页时,网站会删除整个对象吗?

2 个答案:

答案 0 :(得分:4)

你的问题非常普遍,所以我们所能做的就是非常普遍地回答。

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

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

感觉就像使用它来解决内存泄漏(虽然可能是可行的)是一个巨大的黑客,甚至可能没有接近解决问题的最佳方法。但是,由于您基本上没有分享实际导致问题的原因,我们无法真正深入探讨解决特定问题的更好方案。

感觉就像你知道导致泄漏的原因足以将其移动到另一个iframe,那么你可以直接修复泄漏。现代浏览器非常适合由错误引起的泄漏,所以你认为你看到的任何泄漏可能只是你的代码累积某种对象,而不是释放对它的引用,所以它可以被垃圾收集。

我建议你问一个关于如何解决内存泄漏问题的另一个问题,并提供关于你知道什么以及代码如何工作的详细信息(包括实际代码),最糟糕的是,你会得到一些关于如何解决进一步追查什么是泄漏。充其量,人们可以告诉你如何实际修复泄漏。

答案 1 :(得分:0)

如果javascript没有使用localstorage或.. cookies,那么一旦页面中的javascript不再存在(例如,你将页面更改为另一个没有iframe中的javascript),javascript赢了&# 39; t有任何影响。

您无法重新定义“对象”,或显示一些代码,以便我们可以帮助修复“销毁”()'或者记忆'问题和间隔。 Javascript不会导致内存泄漏问题。就像像C ++这样的东西,所以它可能更像循环中的太多操作了吗?