如果一个模块被多个模块引用,那么最终包中有多少个模块实例?

如何解决如果一个模块被多个模块引用,那么最终包中有多少个模块实例?

我想知道两者之间的最佳策略是什么

  • 一个包含所有可重用代码的共享模块
  • 需要时引用的单个可重用代码

我认为反对将所有可重用代码放在共享模块中的原因是它会很大并且会减慢应用程序的加载速度,因为并非每个模块都需要共享模块中的所有代码

galleryModuleProfileModule 都导入 CardModule。它们也都是延迟加载的。

@NgModule({
    declarations: [...],imports: [
        ...,CardModule,...
    ]
})
export class galleryModule { }

@NgModule({
    declarations: [...],...
    ]
})
export class ProfileModule { }

假设用户访问了图库页面galleryModule 将与其依赖项一起加载,即 CardModule。假设在此之后,用户决定转到个人资料页面,这将导致加载 ProfileModule

CardModule第二次加载,还是 Angular 会重复使用与 gallelryModule 一起加载的 CardModule /strong>?

编辑

似乎有人问了同样的问题here。然而,似乎没有人明确回答这个问题。

感谢您的帮助。

解决方法

不,不会第二次加载 CardModule。 Angular 有其内部机制来检测模块是否已经加载。如果是这样,它不会再次加载模块,而是使用已经加载的实例。

注意懒惰模块放在最终包中,只有在访问相应的懒惰路由时才会加载它们。 >

在开发时,使用 CLI 11.x -

运行您的应用程序后,您将看到以下内容
√ Browser application bundle generation complete.

Initial Chunk Files       | Names                  |      Size
vendor.js                 | vendor                 |   7.52 MB
polyfills.js              | polyfills              | 484.59 kB
styles.css,styles.js     | styles                 | 419.34 kB
main.js                   | main                   |  79.30 kB
runtime.js                | runtime                |   9.08 kB

                          | Initial Total          |   8.49 MB

Lazy Chunk Files          | Names                  |      Size
gallery-gallery-module.js | gallery-gallery-module |   7.36 kB
profile-profile-module.js | profile-profile-module |   7.35 kB
common.js   

以下是有关加载如何工作的一些信息 -

  1. Initial Chunk Files 构成最终包,main.js 是放置所有热切模块(应用模块、共享模块等)的位置。

  2. Lazy Chunk Files 包含 Angular 保留的惰性模块列表,CardModule 放在 common.js 中。

  3. 如果您访问 profile page,则会加载 profile-profile-module.jscommon.js。当您稍后访问 gallery page 时,只会加载 gallery-gallery-module.js。当您访问惰性路由时,您可以在浏览器的“网络”选项卡上进行检查。

  4. 如果您有其他模块被多个惰性模块使用,那么这些模块也会被放入 common.js

  5. 如果您的模块仅由一个惰性模块使用,那么这些模块将与该惰性模块捆绑在一起,而不是将它们放在 common.js 中。例如,如果您有一个仅由 XyzModule 使用的 GalleryModule 模块,那么它将与 GalleryModule 捆绑在一起并放入 gallery-gallery-module.js

编辑:
您可以使用 ng build 命令并检查上面在 dist 目录中列出的生成的物理文件,以更好地了解哪些模块与哪些模块捆绑在一起。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?