2014-03-14 40 views
30

我優化我的大Angular App。正如我發現那Google DevTools是很好的檢測問題。當我剛剛開始學習DevTools時,我對內存泄漏非常困惑。如何減少/刪除內存泄漏角應用

當我回到我的應用程序的不同頁面時,配置文件堆的快照大小反覆增加,所以我認爲有一些對象沒有被GC清理,這就是爲什麼我的應用程序在某個時間後變慢所以如何解決這個問題。請幫忙。

注意

這是我的理解使用DevTools,請糾正我,如果我錯了。歡迎其他建議。

到目前爲止我所用

  1. AngularOnce指令用於在需要時降低手錶。
  2. QuickList指令用quick-ng-repeat替換ng-repeat。
  3. InView指令,處理大名單,所以我刪除DOM這是不是在口中。
  4. ngInfiniteScroll指令的延遲加載方法。
+2

下面是你需要給某人什麼樣的信息,一個很好的例子能夠提供一個體面的答案:https://stackoverflow.com/questions/20654684/how-to-catch-memory-leaks-in-an-angular-application – ivarni

+0

這個答案的更新 - 現在角1.3。 x出來了,你可以在大多數情況下使用'::'bind-once方法,而不是添加anot她的依賴來處理這個問題。 – Seiyria

+0

如果您使用AngularUI路由器,請注意其內存泄漏。 https://github.com/angular-ui/ui-router/issues/545 –

回答

37
  1. 刪除綁定,以避免內存泄漏,使用範圍 $destroy()方法。

    注:

    內存泄漏的角度最有可能的罪魁禍首是JQuery的在 您的指令使用。如果您在使用jQuery插件您的指令 附加一個事件偵聽器,後者將保持對它的引用您的DOM 角刪除其自己的參考DOM,這意味着 即使它永遠不會被瀏覽器當作垃圾回收,這反過來又意味着 「獨立DOM樹」在你的記憶

    在你的指令繼續實踐解除綁定jQuery的事件。 $ destory在從DOM中刪除 元素之前可用於清理DOM綁定的方法。

    $scope.$on("$destroy",function() { 
        $(window).off("resize.Viewport"); 
    });  
    
  2. 不要忘記取消$超時定時器在$銷燬活動在 AngularJS

    $scope.$on("$destroy",function(event) { 
        $timeout.cancel(timer); 
    }); 
    
+4

而[這裏](http://blog.cycle-interactive.com/?p=524)是你提到的全文。 –

+2

鏈接遭受鏈接腐爛和網站已經失效,但是,[Wayback](https://web.archive.org/web/20150914164040/http://blog.cycle-interactive.com/?p=524 )有這個存檔。 – t0mm13b