【发布时间】:2021-06-04 11:27:49
【问题描述】:
当我访问 Material Components Demo page 并在页面之间切换(例如 Autocomplete 和 Badge)时,我可以在 Chrome 开发工具性能监视器中看到, DOM 节点和 JS 事件监听器的数量不断增加。
例子:
- 我打开Overview(在隐身窗口中,因此没有其他活动的chrome扩展)
- 在“内存”选项卡上启动垃圾回收 (GC)
- DOM 节点 ~1800 / JS 事件监听器 ~400
- 现在点击左侧菜单中的 Badge 并开始 GC
- DOM 节点 ~2400/JS 事件监听器 ~500
- 返回概述并开始 GC
- DOM 节点 ~3500/JS 事件监听器 ~700
注意:当我们访问多个页面然后启动 GC 时,内存也会增加
垃圾回收不应该释放上一页的 dom 节点吗?
或者这是材料组件库中的内存泄漏(或者可能在演示应用中)?
我问是因为我们在我们的生产应用程序(很大)中也看到了这一点,它似乎对性能产生了严重的影响。
【问题讨论】:
-
SPA(单页应用程序)意味着它使用相同的页面,导航是通过 history.pushState 伪造的,因此您必须找到不释放对旧 DOM 的引用的代码。
标签: angular memory-leaks angular-material google-chrome-devtools material-components-web