Angular 2+路由器是否卸载以前的延迟加载模块

时间:2017-04-18 01:46:16

标签: javascript angularjs angular memory-management lazy-loading

我一直在研究许多ngModule,每个都封装了他们自己的组件,服务,指令等。它们很大。现在我已准备好将我的应用程序串起来并懒洋洋地将每个模块路由到主路由器插座,我担心整体内存消耗,特别是对于低端设备(平板电脑仅启动,而不是移动设备)。所以我的问题是当路由器延迟加载一个新模块时,是否卸载了之前的延迟加载模块?我只能找到有关JIT,AOT,预加载和延迟加载的信息,但是在后加载的上下文中缺少关于Angular 2+和内存管理的资源或讨论。

提前感谢您考虑我的问题。

2 个答案:

答案 0 :(得分:1)

我可以确认虽然它们最初没有使用延迟加载方法加载,但在路由到另一个模块后它们不会被卸载。更糟糕的是卸载模块不会受到ngx的支持。这是推特布拉德·格林提出这个问题的推文。

https://twitter.com/bunsofaluminum/status/642397294474756096

我想添加关于卸载组件的快速评论。您可以通过两种方式卸载组件和与之关联的数据 DynamicComponentLoader是核心的一部分,OnDestroy实现就像OnInit一样。您应该能够利用这两者来帮助整体内存负载,特别是如果您使用了许多可以取消订阅OnDestroy的服务。

答案 1 :(得分:1)

“{尚未实现”似乎是still the correct answer as of 2017-04

然而,开发商Sander Elias提出了一种解决方法:

  

刷新内存的唯一方法是重新加载页面。最简单的方法是使用href而不是routerlink在应用程序的某些部分之间导航。