2017-08-11 80 views
8

經過Chrome最新和其他瀏覽器測試。此頁面開始timer()每60秒刷新一次。在init()和每refresh(),它從服務器獲取數據並在頁面中顯示相同。我們發現每次刷新都會泄漏大量的MB。angularjs 1.5:如何識別什麼是泄漏和修復泄漏?

  1. 現在,我該如何識別正在泄漏

  2. 的特定對象和/或DOM節點。一旦我確定從#1對象/節點,我怎麼去修復泄漏?

是否有任何書籍,很好的教程,將涵蓋上述Angularjs 1.5?

+1

一個好的開始就是在你的開發者工具(或更新的Chrome版本中的內存)中試用Profiler。 –

+0

我需要更多詳細信息才能使其正常工作。我搜索了「如何使用Chrome開發工具查找內存泄漏」,並能夠識別分離的DOM對象。但從那裏,我無法得到任何具體的東西。 – anjanb

回答

1

您可能找到了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節點是內存泄漏的常見原因。

  1. 如果你不拿着計時器的參考,但在每次刷新時創建一個新的計時器 - 泄漏,可解通過重用$timeout

  2. 結帳 - CTRL + F $scope is retained by a context for a closure.上第二次提供鏈接。這個用例解釋的與你所擁有的很相似。另外的文章中:

我們可以開啓該功能,並檢查它的問題。有一個$ http.get作爲使用$ scope的閉包,但令人震驚的是有一個$ interval被註冊爲每10秒運行一次,永遠不會註銷。間隔回調使用另一個$ http.get,並使用$ scope的閉包。這就是問題。

如果沒有上述那麼在這裏也適用的開放問題AngularJSmemory leak作爲關鍵字列表:

https://github.com/angular/angular.js/issues?utf8=%E2%9C%93&q=is%3Aopen%20memory%20leak

1

我不知道這是否會幫助你是不是(也許你已經看過),但值得一提的是。我在之前的應用程序中遇到過類似的問題,即在每個ajax請求期間持續複製對象。所以從頁面的負載我將使用大約50MB的內存,但是在做了10-15個Ajax調用之後,內存將會飛速增長到1GB以上。

我能夠使用chrome開發工具 - >內存選項卡識別和解決問題。通過這裏您可以記錄內存的分配配置文件並獲得堆快照。所以,爲了您的情況,我可能會將計時器減少到5或10秒以進行測試,然後運行這些分析器。您將能夠了解正在調用哪些方法以及花費多少。

希望這會有所幫助。