通过页面重新加载来诊断内存泄漏

时间:2016-01-22 17:28:22

标签: javascript google-chrome firefox memory-leaks

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

我了解内存处理是针对浏览器的,因此Chrome或Firefox的答案可能会有所不同。

注意:我认识到在这个问题中提到了很多浏览器(这可能是偏离主题的),但这个问题的关键是关于javascript调试,我认为这是非常主题的。

2 个答案:

答案 0 :(得分:2)

除了浏览器/扩展程序错误,浏览器在不再需要时释放资源; Firefox清除compartments,Chrome会杀死processes和关联的存储空间。

Firefox尽力而为,但可能需要一些时间来清理内存,有时可能会创建zombie compartments

  

当垃圾收集时会破坏隔间。这种情况发生在最后一次引用消失后的某个时间。这意味着页面关闭和隔间消失之间可能会有延迟......

     

有时,由于Firefox中的错误,Add-on SDK和/或附加组件,会创建永不销毁的隔离专区。这些是一种特殊的内存泄漏,它们会导致Firefox的内存使用量逐渐增加,减慢速度并使其更容易崩溃。

Chrome每个标签使用一个进程(对于标签中的某些实体以及IIRC,例如插件,iframe等,实际上是子进程),效果相同。虽然快速检查chrome://memory-redirect/并刷新标签,但使用的是pid。所以刷新并不是一个完全干净的名单。

FWIW Chrome有一个“强制重新加载”,用于清除缓存,可能对清除更多内存或安慰剂有用:cmd-shift-r

我对内部人员并不熟悉,但我只看到当particular browser变得过于聪明并且在你不改变原点等时试图保留东西时刷新之间没有可靠释放的东西。为了提高负载性能。

简而言之,如果您没有按预期释放内存,但是您希望使用各种“about:memory”工具来验证它,那么您可能会绊倒浏览器错误,此时它将是你到avoid such behavior and/or report the issue to the browser's dev team

否则,我认为通过使用各种可用工具解决页面中的内存泄漏问题,您可以获得最佳服务。

答案 1 :(得分:0)

调试JS的资源使用情况的一种好方法是在检查工具中使用Firefox性能监视器。 Firefox Dev Edition has more in-depth tools

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

如果您觉得它已经运行了足够长的时间,请停止录制并向您显示所有数据。在顶部将显示一个显示性能的图表,您可以单击任何部分并检查当时运行的所有脚本。

A full tutorial for the performance tools can be found here