gpt4 book ai didi

angularjs - AngularJS 中的内存管理

转载 作者:行者123 更新时间:2023-12-02 03:22:13 24 4
gpt4 key购买 nike

我是 Angular 的新手,所以我可能完全错了。我正在尝试使用 angularJS 指令创建一个 treeView。到目前为止,我的代码实现了这一点,除了似乎存在内存泄漏,因为每次重新加载 TreeView 时它都会减慢速度,并最终导致浏览器崩溃。

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

fiddler有我的来源,它会为您构建一棵随机树,并让您能够选择树中的节点数量。如果您将该数字提高到一个更高的数字,并重新加载几次,您会注意到它每次都逐渐减慢。

任何关于如何清理自己的想法将不胜感激,谢谢。

编辑:

fiddler这是第二次尝试,我朝着完全不同的方向前进。在我看来,它效率更高,代码也更干净。但是,这个也有一个问题。周期性地,并且看似随机地在树的刷新中抛出无限摘要异常。

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

最佳答案

正如评论中的讨论所示,我在我的 TreeView 中创建了范围,但从未正确发布范围。虽然解决方案不是很容易弄清楚,但它实际上是一个非常简单的解决方案,并且为我澄清了很多事情。

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

关于angularjs - AngularJS 中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32576737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com