我正在优化我的大型角应用程序。因为我发现一个Google DevTools是非常好的检测问题。当我刚开始学习DevTools,我很困惑的内存泄漏。
当我回到我的应用程序中的不同页面,Profile堆快照大小一次又一次增加,所以我认为有一些对象,没有被GC清理,这就是为什么我的应用程序在一段时间后变慢,如何解决这个。请帮忙。
注意
这是我理解使用DevTools,请纠正我,如果我错了。欢迎其他建议。
直到现在我使用了
> AngularOnce指令,以便在需要时减少手表。
> QuickList指令,将ng-repeat替换为quick-ng-repeat。
> InView指令,处理大列表,所以我删除不在视口中的DOM。
>从ngInfiniteScroll指令的延迟加载方法。
>删除绑定以避免内存泄漏,使用范围
$destroy()方法。
原文链接:https://www.f2er.com/angularjs/145655.html$destroy()方法。
注意:
The most likely culprit of memory leak in Angular is JQuery used in
your directives. If you attach an event-listener in your directive
using a JQuery plugin,the latter would keep a reference to your DOM
even after Angular deletes its own reference to the DOM,which means
it would never be garbage-collected by the browser,which in turn
means “Detached DOM tree” in your memory
在您的指令中保持解除绑定jQuery事件的实践。
$ destory可以用来清除DOM绑定之前的方法
元素从DOM中删除。
$scope.$on("$destroy",function() { $( window ).off( "resize.Viewport" ); });
>不要忘记取消$ timeout定时器在$ destroy事件中
AngularJS
$scope.$on("$destroy",function( event ) { $timeout.cancel( timer ); });