20

当您使用具有 100 个不同视图的 ngView 时,每个视图具有不同的范围。Angular 会自动处理销毁旧模板/作用域还是保留在内存中?在我开始编写自定义代码以减少内存负载之前,我只是好奇 Angular 是否会自行处理这个问题。到目前为止,我去的每个新视图都只是堆积在内存中。

这是一个 AngularJS 特定的问题。我知道垃圾收集在 javascript 中是如何工作的。

4

1 回答 1

22

引入范围背后的设计决策之一是简化内存管理。通过将模型的空间划分为子部分(范围),我们可以删除模型(范围)中不需要的部分,并在需要时添加新部分。所以是的,作用域是整个内存管理难题的重要组成部分。

当涉及到您的具体问题时ng-view- 此指令将只保留当前活动视图的范围。ng-view是作用域创建(和作用域破坏!)指令之一。当导航到新视图时,它将自动创建一个新范围,并自动销毁与旧视图连接的范围。这可以在 AngularJS源代码中轻松验证。

唯一需要考虑的内存消耗部分是通过网络获取的模板。路由中引用的所有模板都缓存在$templateCache. 如果您确定模板解决了应用程序中的特定性能瓶颈,您可以谨慎地使用模板。我们只需要意识到这是内存消耗的交易时间(网络时间)。

简而言之:无需推出自己的范围管理ng-view- 如果您看到任何范围保留,则应将其报告为错误。

于 2013-06-05T20:43:16.567 回答