【问题标题】:angular js ui grid memory leak issueangular js ui网格内存泄漏问题
【发布时间】:2023-09-12 07:26:01
【问题描述】:

我正在开发一个使用 Angular js UI 网格的应用程序。但是当我继续使用我的应用程序时,它会不断增加内存而不释放 dom 对象。

我创建了一个示例应用程序,我可以在其中重新创建相同的内存泄漏问题。我在一个 div 中保留了一个按钮(“打开滑块”),单击该按钮我将动态加载另一个包含 UI 网格和一些数据的 div。另一个 div 中有另一个按钮(“关闭滑块”),单击它我可以隐藏 UI 网格。

以下是我们在 IE 浏览器上调查问题时观察到的屏幕截图:

Screen shot showing memory usage when I click on Open slider button to show up the UI grid

Screen show showing no memory released when I click on Close slider button to hide UI grid

因此,如图 2 所示,当我关闭 UI 网格 div 时,内存没有被释放(如开发人员选项 > 内存选项卡中所示)。那么,有没有什么方法可以在我卸载 UI 网格后释放内存,或者有什么其他方法可以移除已分离的 dom 对象?

您可以在 cmets 部分找到上述应用程序的 plunker。

【问题讨论】:

标签: javascript angularjs memory-management memory-leaks angular-ui-grid


【解决方案1】:

我用 Chrome 开发工具尝试了你的 plunker 分析,我不得不说我没有发现内存泄漏的证据。

在这里你可以看到我尝试了多次打开和关闭网格,最后内存被释放了。

此外,我尝试了另一种方法,要求 Chrome 在每次点击之前和之后执行 GC,我得到了这个:

在这里你可以看到,在每个循环之后,当我请求 GC 时,只有少量内存没有释放,但它似乎没有随着时间的推移而增长。

【讨论】:

  • 你能在IE浏览器中运行同样的测试吗?与 IE 相比,Chrome 处理 GC 更好。
【解决方案2】:

在 Angular js 中处理内存管理的最佳方法是使用“Controller as”语法。

一旦控制器被卸载,使用控制器的别名会从内存中释放 DOM 元素。

【讨论】: