Javascript 使用页面重新加载诊断内存泄漏

Javascript 使用页面重新加载诊断内存泄漏,javascript,google-chrome,firefox,memory-leaks,Javascript,Google Chrome,Firefox,Memory Leaks,我怀疑我的一页javascript应用程序某处有内存泄漏。如果页面保持打开状态,运行Firefox或Chrome的薄弱设备似乎最终会崩溃。我正在尝试确定重新加载页面是否会释放内存 我知道内存处理是特定于浏览器的,所以答案可能在Chrome或Firefox中有所不同 注意:我知道在这个问题中提到了很多浏览器(这是离题的),但是这个问题的重点是关于javascript调试,我认为这是非常离题的 除了浏览器/扩展错误,浏览器在不再需要资源时释放资源;Firefox清除、Chrome清除和相关存储 Fi

我怀疑我的一页javascript应用程序某处有内存泄漏。如果页面保持打开状态,运行Firefox或Chrome的薄弱设备似乎最终会崩溃。我正在尝试确定重新加载页面是否会释放内存

我知道内存处理是特定于浏览器的,所以答案可能在Chrome或Firefox中有所不同


注意:我知道在这个问题中提到了很多浏览器(这是离题的),但是这个问题的重点是关于javascript调试,我认为这是非常离题的

除了浏览器/扩展错误,浏览器在不再需要资源时释放资源;Firefox清除、Chrome清除和相关存储

Firefox尽了最大努力,但可能需要一些时间来清除内存,有时可能会创建:

垃圾收集时,隔间被破坏。这发生在最后一次引用消失后的某个时间。这意味着在页面关闭和其分区消失之间可能存在延迟

有时,由于Firefox、加载项SDK和/或加载项中的错误,会创建从未被破坏的分区。这是一种特殊的内存泄漏,它们会导致Firefox的内存使用量随着时间的推移逐渐增加,速度减慢,更容易崩溃

Chrome在每个选项卡上使用一个进程(实际上是选项卡中某些实体的子进程,以及IIRC,例如插件、iFrame等),达到相同的效果。通过快速检查
chrome://memory-redirect/
和刷新选项卡时使用的是相同的
pid
。因此,刷新并不是一个完全干净的记录

FWIW Chrome具有清除缓存的“强制重新加载”功能,可能用于清除更多内存,也可能是一种安慰剂:
cmd-shift-r

我对其内部结构并不十分熟悉,但我只看到,当a变得太聪明时,在刷新之间无法可靠地释放出一些东西,当您不改变源代码时,试图保留一些东西,以提高负载性能

简而言之,如果您没有看到预期的内存释放,但希望使用各种“about:memory”工具来验证这一点,那么您可能会被浏览器错误绊倒


否则,我认为最好使用各种可用工具解决页面中的内存泄漏问题。

调试JS资源使用情况的一个好方法是在检查工具中使用Firefox性能监视器

在页面上按F12键,然后单击检查窗口中的小车速表图标;这将打开性能监视器。按下“开始录制”按钮,Firefox将开始对页面上的所有脚本计时、CSS活动、用户输入等进行基准测试

当你觉得它已经运行了足够长的时间,停止记录,你会看到所有的数据。顶部是一个显示性能的图表,您可以单击任何部分并检查当时运行的所有脚本


能否显示您怀疑可能包含的任何代码?这有帮助吗?(否则,刷新可能会清除内存使用,您通常会担心“单页应用”中的内存泄漏。)@mczepiel谢谢,这很有帮助,但似乎没有解决有关页面重新加载的具体问题。但是你的插入语。。。你能在回答中详细说明一下吗?@depperm我还没有将泄漏隔离到特定的代码区域,因此只发布“最小”代码样本的规则非常严格。此外,尽管我欢迎您的帮助,但这个问题的本质并不是诊断我的特定内存泄漏。而是确定页面重新加载作为诊断技术的有效性。有道理?