GEO*_*OCH 6 memory-leaks destroy angularjs angular-ui-router
我的应用程序正在使用ui-router.我注意到在更改路线时记忆力会不断增加.我已经检查了代码中常见的东西,如事件绑定,元素的破坏等.但是当应用程序首次加载时,我仍然可以获得超过50%的初始内存.我怀疑它的ui路由器,但无法通过其代码找到任何问题.似乎所有东西都被清理干净并妥善移除.
该应用程序从50MB的初始内存开始,导航到下一页,然后返回30MB,总共80MB,依此类推.(这是关于chrome,在Firefox中它更糟糕)
长话短说我已经通过$ destroy方法并在我的测试中导航到下一页$ destroy被执行了100次.
通过在$ destroy中添加以下代码行,它被调用300次,泄漏率从50%增加到10%.
这个变化是微不足道的,从我测量的cpu加载时间来看,即使我在$ scope层次结构中有这个循环,它也不会影响性能:
$destroy: function() {
// We can't destroy a scope that has been already destroyed.
if (this.$$destroyed) return;
//Adding this loop gets more $scopes destroyed!!! why?
while (this.$$childHead) {
this.$$childHead.$destroy();
}
var parent = this.$parent;
this.$broadcast('$destroy');
this.$$destroyed = true;
...
Run Code Online (Sandbox Code Playgroud)
我不确定为什么虽然这种情况正在发生,也许一些专家可能会有一些亮点,如果在$ destroy中有改变的潜在问题.我使用角1.4.7
谢谢