經過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