【问题标题】:Does Angular lazy-loading reduce the bundle size?Angular 延迟加载会减小包大小吗?
【发布时间】:2019-05-01 08:10:58
【问题描述】:

我是 Angular 的新手。我想了解更多关于延迟加载的信息。根据定义,延迟加载模块可以帮助我们减少启动时间。所以我的问题是,假设我的应用程序有 50 个组件。在使用生产环境构建它之后,它会生成 900 KB 的 vendor.js。如果我延迟加载其中的 10 个组件,它们会生成 100 kb 的块文件“1.chunk.js”。

那么在这种情况下,我的 vendor.js 包大小是否从 900 KB 减少到 800 KB?如果不是延迟加载模块如何帮助我们减少启动时间?

【问题讨论】:

  • 是的,它减少了初始捆绑包的大小,这使得页面在屏幕上显示得更快。

标签: angular lazy-loading


【解决方案1】:

不,Angular 的延迟加载功能不会减小包大小,它只加载包的一部分(按需)-AKA chunk- 而不是完全加载。所以对于你的情况,bundle size won't reduction from 900 KB (如果你累积块的大小,因为在实现延迟加载之后,会有几个块要加载),但也不会立即加载900 KB

【讨论】:

    【解决方案2】:

    顾名思义,延迟加载仅在请求时才加载(即延迟)

    话虽如此,如果您在应用中实现了延迟加载,则应用将仅加载加载应用所需的相关模块。

    所以本质上它并没有加载应用程序最初不需要加载的模块。

    这就是它如何帮助加快应用程序的加载时间。

    【讨论】:

      【解决方案3】:

      延迟加载基本上是将您的组件分解为模块。所以在路由中你只需要配置主路由并将模块加载为子路由。

      这会将您的 100 个组件分成 10 个模块,每个模块有 10 个组件 所以对于每一个你都会有单独的

      module-ngfactory.js
      

      文件。因此,如果您将这 100 个文件包含在一个模块中(不是延迟加载),您将拥有一个 module-ngfactory.js 文件,该文件比这更大。

      并且这种加载是按需加载的,并且仅在请求时才加载。所以加载速度很快。

      加速 Angular 加载的最佳方法是引入 AOT 构建。当你使用

      ng-s 
      

      这将转译代码并让您知道转译的状态。但包括 ts 文件在内的所有数据都将发送到浏览器以进行调试。所以 ts 到 js 的转换发生在浏览器中。这很慢。

      通过使用

      ng-s --aot 
      

      AOT - 提前编译将生成 js 文件并发送到浏览器。所以没有浏览器端转译。这比使用 JIT 非常非常快

      【讨论】:

        【解决方案4】:

        由于加载的初始块大小非常小,与所有模块都急切加载的大包大小相比,它会加载得更快。

        【讨论】:

          猜你喜欢
          • 2020-05-25
          • 1970-01-01
          • 2017-10-06
          • 2019-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-19
          相关资源
          最近更新 更多