经过Chrome最新和其他浏览器测试。此页面开始timer()
每60秒刷新一次。在init()
和每refresh()
,它从服务器获取数据并在页面中显示相同。我们发现每次刷新都会泄漏大量的MB。angularjs 1.5:如何识别什么是泄漏和修复泄漏?
现在,我该如何识别正在泄漏
的特定对象和/或DOM节点。一旦我确定从#1对象/节点,我怎么去修复泄漏?
是否有任何书籍,很好的教程,将涵盖上述Angularjs 1.5?
经过Chrome最新和其他浏览器测试。此页面开始timer()
每60秒刷新一次。在init()
和每refresh()
,它从服务器获取数据并在页面中显示相同。我们发现每次刷新都会泄漏大量的MB。angularjs 1.5:如何识别什么是泄漏和修复泄漏?
现在,我该如何识别正在泄漏
的特定对象和/或DOM节点。一旦我确定从#1对象/节点,我怎么去修复泄漏?
是否有任何书籍,很好的教程,将涵盖上述Angularjs 1.5?
您可能找到了https://developers.google.com/web/tools/chrome-devtools/memory-problems/和http://www.dwmkerr.com/fixing-memory-leaks-in-angularjs-applications/,因为这里没有更详细的资源。
DOM节点只能当有从任一页面的DOM树或JavaScript代码未被引用被垃圾收集。一个节点被从DOM树中移除时被认为是“分离的”,但是一些JavaScript仍然引用它。分离的DOM节点是内存泄漏的常见原因。
如果你不拿着计时器的参考,但在每次刷新时创建一个新的计时器 - 泄漏,可解通过重用$timeout
结帐 - CTRL + F $scope is retained by a context for a closure.
上第二次提供链接。这个用例解释的与你所拥有的很相似。另外的文章中:
我们可以开启该功能,并检查它的问题。有一个$ http.get作为使用$ scope的闭包,但令人震惊的是有一个$ interval被注册为每10秒运行一次,永远不会注销。间隔回调使用另一个$ http.get,并使用$ scope的闭包。这就是问题。
如果没有上述那么在这里也适用的开放问题AngularJS
有memory leak
作为关键字列表:
https://github.com/angular/angular.js/issues?utf8=%E2%9C%93&q=is%3Aopen%20memory%20leak
我不知道这是否会帮助你是不是(也许你已经看过),但值得一提的是。我在之前的应用程序中遇到过类似的问题,即在每个ajax请求期间持续复制对象。所以从页面的负载我将使用大约50MB的内存,但是在做了10-15个Ajax调用之后,内存将会飞速增长到1GB以上。
我能够使用chrome开发工具 - >内存选项卡识别和解决问题。通过这里您可以记录内存的分配配置文件并获得堆快照。所以,为了您的情况,我可能会将计时器减少到5或10秒以进行测试,然后运行这些分析器。您将能够了解正在调用哪些方法以及花费多少。
希望这会有所帮助。
一个好的开始就是在你的开发者工具(或更新的Chrome版本中的内存)中试用Profiler。 –
我需要更多详细信息才能使其正常工作。我搜索了“如何使用Chrome开发工具查找内存泄漏”,并能够识别分离的DOM对象。但从那里,我无法得到任何具体的东西。 – anjanb