AngularJS中的内存管理

杰西

我是新来的有角度的人,所以也许我要解决这个完全错误的问题。我正在尝试使用angularJS指令创建treeView。到目前为止,我所拥有的代码完成了此操作,但是每次树视图重新加载时,似乎都会出现内存泄漏,它会减慢速度,并最终导致浏览器崩溃。

我创建了以下两个指令来完成我的任务jscTreeViewjscTreeNode

这个提琴手有我的资料,它为您构建一棵随机树,并使您能够选择树中的节点数量。如果将该数字增加到一个更大的数字,然后重新加载几次,您会发现它每次都会逐渐变慢。

非常感谢您对自己后如何清理的任何想法。

编辑:

这个提琴手是第二次尝试,我尝试了完全不同的方向。我认为它效率更高,代码也更干净。但是,这也有一个问题。周期性地,并且看似随机地刷新树,这会引发一个无限的摘要异常。

注意:并非先前树中的所有功能都在当前树中。那是因为我还没有编程。

杰西

正如评论中的讨论所表明的那样,我正在树视图中创建但从未正确释放范围。虽然解决方案不是很容易弄清楚,但实际上它是一个简单的解决方案,为我澄清了很多事情。

我需要做的是克隆树的根作用域var newScope = scope.$new();,然后构建所有其余的子树以及它们的关联节点,并使用克隆的作用域进行编译newScope编译后,它将克隆的作用域存储到指令专有的变量中lastScope = newScope;当watch属性更新并回调到我的指令时,最后一个克隆的作用域被破坏lastScope.$destroy();销毁克隆的作用域会自动销毁在其下创建的所有子作用域(节点以及子树)。由于@Jorg的作用域计数工具,因此创建了作用域的新克隆,并重复了该过程,我可以看到每次迭代都可以很好地清理所有内容。这是解决方案小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章