Angularjs $破坏childHead以减少可能来自ui-router的内存泄漏

时间:2015-11-11 18:46:22

标签: angularjs memory-leaks angular-ui-router destroy

我的应用正在使用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;

    ...

我不确定为什么虽然这种情况正在发生,但是也许一些专家可能会解释一下,如果在$ destroy中发生变化有潜在的问题。我使用的是角1.4.7

由于

0 个答案:

没有答案