Angularjs如何使用ngView处理内存管理?

时间:2013-06-05 19:12:10

标签: javascript angularjs angularjs-scope

当您使用ngView时,说100个不同的视图,每个视图具有不同的范围。 Angular会自动处理破坏旧模板/范围还是留在内存中?我很好奇,如果Angular在我开始编写自定义代码以减少内存负载之前自己处理这个问题。到目前为止,我所看到的每个新视图都会叠加在内存中。

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

1 个答案:

答案 0 :(得分:22)

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

当谈到您关于ng-view的具体问题时,此指令将仅为当前活动视图保留范围。 ng-view是范围创建(和范围销毁!)指令之一。当导航到新视图时,它将自动创建新范围,并将自动销毁与旧视图关联的范围。这可以在AngularJS source code中轻松验证。

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

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