当您使用具有 100 个不同视图的 ngView 时,每个视图具有不同的范围。Angular 会自动处理销毁旧模板/作用域还是保留在内存中?在我开始编写自定义代码以减少内存负载之前,我只是好奇 Angular 是否会自行处理这个问题。到目前为止,我去的每个新视图都只是堆积在内存中。
这是一个 AngularJS 特定的问题。我知道垃圾收集在 javascript 中是如何工作的。
当您使用具有 100 个不同视图的 ngView 时,每个视图具有不同的范围。Angular 会自动处理销毁旧模板/作用域还是保留在内存中?在我开始编写自定义代码以减少内存负载之前,我只是好奇 Angular 是否会自行处理这个问题。到目前为止,我去的每个新视图都只是堆积在内存中。
这是一个 AngularJS 特定的问题。我知道垃圾收集在 javascript 中是如何工作的。
引入范围背后的设计决策之一是简化内存管理。通过将模型的空间划分为子部分(范围),我们可以删除模型(范围)中不需要的部分,并在需要时添加新部分。所以是的,作用域是整个内存管理难题的重要组成部分。
当涉及到您的具体问题时ng-view
- 此指令将只保留当前活动视图的范围。ng-view
是作用域创建(和作用域破坏!)指令之一。当导航到新视图时,它将自动创建一个新范围,并自动销毁与旧视图连接的范围。这可以在 AngularJS源代码中轻松验证。
唯一需要考虑的内存消耗部分是通过网络获取的模板。路由中引用的所有模板都缓存在$templateCache
. 如果您确定模板解决了应用程序中的特定性能瓶颈,您可以谨慎地使用模板。我们只需要意识到这是内存消耗的交易时间(网络时间)。
简而言之:无需推出自己的范围管理ng-view
- 如果您看到任何范围保留,则应将其报告为错误。