我们有一个使用Angular 4
的大型lazy loading
应用程序以及preloadAllModules
的预加载策略。我们正在使用Angular CLI
。
在查看Chrome检查器中的内存问题时,我注意到我们到处都有多个模块实例。
如果我正在阅读此权利,我们会有TranslateModule
和HttpModule
等83个实例...
我唯一能想到的是每个lazy loaded
模块都有自己的root,需要为该bundle创建自己的模块吗?
是否可以摆脱所有这些实例,或者它是如何工作的?
答案 0 :(得分:2)
您应该将所有这些共享模块放入一个核心模块,该核心模块只加载一次并且仅由应用程序模块导入
答案 1 :(得分:2)
是否有可能摆脱所有这些实例,或者就是这样 它有效吗?
是的,只需将它们导入根AppModule
即可。但是,虽然您可以避免将HttModule
放入每个已加载的模块中,并且只能将其导入根AppModule
一次,但您无法避免RouterModule
的重复应该像RouterModule.forChild(routes)
一样使用HttpModule
1}}。
重复发生是因为每个延迟加载的模块都有自己的注入器,它有自己的所有导入模块的实例。因此,如果您有83个延迟加载的模块,并且每个模块导入RouterModule
和nagios-common
,则每个导入模块将有83个实例。
欲了解更多信息,请阅读: