Javascript Angular 5不断增长的浏览器内存

Javascript Angular 5不断增长的浏览器内存,javascript,html,angular,dom,single-page-application,Javascript,Html,Angular,Dom,Single Page Application,我有5个项目。这是一个有很多标签的管理网站。每个选项卡都包含复杂的过滤器和网格。在频繁切换选项卡之后,内存会增加(以ChromeJS堆大小为单位),但DOM节点的数量并没有增加。在5分钟内将内存增加到1GB不是问题。IE的限制约为1.5 GB,然后由于内存不足而下降 起初我认为这只是我们的应用程序或角度的问题,但我创建了一个简单的html测试页面,其中包含两个按钮和简单的javascript。一个按钮添加文本框,另一个按钮删除文本框。然后我创建了一个简单的E2E测试,增加了1000倍,删除了文本

我有5个项目。这是一个有很多标签的管理网站。每个选项卡都包含复杂的过滤器和网格。在频繁切换选项卡之后,内存会增加(以ChromeJS堆大小为单位),但DOM节点的数量并没有增加。在5分钟内将内存增加到1GB不是问题。IE的限制约为1.5 GB,然后由于内存不足而下降

起初我认为这只是我们的应用程序或角度的问题,但我创建了一个简单的html测试页面,其中包含两个按钮和简单的javascript。一个按钮添加文本框,另一个按钮删除文本框。然后我创建了一个简单的E2E测试,增加了1000倍,删除了文本框,浏览器中的内存也增加了。在Chrome(66)和IE11中测试,其症状与angular应用程序相同,JS堆正在增加,但DOM节点的数量没有问题

然后我试着看facebook.com,它是最著名的单页应用程序之一。我观看了同样的行为,立刻放弃应用程序不是问题

我认为这个问题是由于反复添加和删除许多html元素造成的


是否有人有类似的经验或解决方案?

如果您使用的是导航控制器,则需要确保页面得到正确处理。前几天我遇到了一个问题,在导航离开后,旧页面仍然留在dom中。您订阅了ngDestory并通过处理内容避免了内存泄漏吗JavaScript不仅仅是dom节点。一种可能的方法是在chrome开发工具中进行内存快照。尝试确定是否存在不应该存在的内存块,并确定任何阻止内存释放的保持器。我的个人经历——我曾惊讶地发现console.log(obj)实际上会阻止obj的发布。顺便说一句,还有一件事需要注意。应用程序/页面可能会在内存中增长,并消耗分配给它的所有内存。您感兴趣的是——一旦GC启动,哪些内存将被垃圾收集。你不知道那一刻是什么时候发生的。