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

mfr*_*107 20 javascript angularjs angularjs-scope

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

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

pko*_*rce 22

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

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

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

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