【问题标题】:How to reduce angular application build time?如何减少角度应用程序构建时间?
【发布时间】:2020-09-27 01:15:24
【问题描述】:

索引:

我正在使用 angular cli - 7,我将根据我的知识告诉我如何减少构建时间。

问题:

现在,很多用户和开发人员都在等待启用 Build optimizer 的内置产品太久。

如果您的应用程序有很多文件(超过 1000 个组件),那么构建时间需要超过 1 小时。

在我的应用程序中,我们为 QA 启用了构建优化,而且构建时间超过 2 小时。因此,由于构建时间长,因此很难对测试人员/开发人员进行快速功能测试。所以我决定减少构建时间。

我分析了什么。

我检查了每个构建过程,以了解哪个步骤需要很长时间才能完成,因此我发现以下步骤需要很长时间才能完成。

  • 69%-70% - 编译过程- ,所以我们不能因为文件编译而减少这个。
  • 79%-80% - 串联模块 - 此过程需要 25 分钟以上。
  • 90%-92% - 对 terser 的块优化 - 此过程大约需要 40 分钟,并且占用过多的 CPU 进程(发生系统挂起)。

我是如何解决的?

69%-70%:编译

这是编译过程,所以离开它。

79%-80%:串联模块过程:

请按照以下步骤操作

1- npm i -D @angular-builders/custom-webpack

注意: 由于某些版本问题,我在我的应用程序中安装了^7.4.3version。

2-修改angular.json配置如下

"architect": {
    "build": {
      "builder": "@angular-builders/custom-webpack:browser",
      "options": {
        "customWebpackConfig": {
           "path": "./extra-webpack.config.js"
        },

3-使用以下代码在 angular.json 旁边创建一个名为 extra-webpack.config.js 的新文件

module.exports = {
    optimization: {
       concatenateModules: false
    }
};

如果您执行上述步骤,构建时间将减少约 30 分钟。请访问blog了解更多详情。

90%-92%:简洁的块优化:

如果您的节点模块文件夹中有 terser,请在 package.json 文件中添加以下行。

 "resolutions": {
        "uglify-es": "npm:terser"
    }

注意:如果节点模块文件夹中没有terser,请安装。

2293551ms --- 没有分辨率

596900ms --- 有分辨率

附加提示:(不推荐)

如果您想减少更多的构建时间,请在您的构建命令或angular.json 文件中启用供应商块并禁用提取 CSS

ng build --configuration=qa --vendor-chunk=true --extract-css=false 

影响不大,但在 10%-12% 的过程中也减少了 10 - 15 分钟。

结果:

现在我的应用程序构建时间减少了 1 个多小时,现在可以在 20-30 分钟内运行

我想知道什么?

上述更改是否会在角度构建编译和运行时产生任何问题?如果您有任何替代/其他解决方案来通过构建优化减少构建时间,请告诉我。

【问题讨论】:

  • @AluanHaddad 。我们使用了单独/子模块实现,还实现了延迟加载。 :)
  • @AluanHaddad,当我的项目规模很大时,我也遇到了这个问题。我尝试了很多次我的架构,但没有发现任何这样的问题。我通过禁用供应商块并使用 aot=true 禁用构建优化器暂时解决了这个问题
  • @RameshRajendran,这就是我们要说的。
  • @AluanHaddad 在我的情况下,QA 环境也确实需要它。在我的应用程序中,我们希望在 QA 和 UAT 中运行构建,与优化的 prod 相同。
  • 我认为这是很好的做法。您可以尝试使用caching in Webpack

标签: javascript angular typescript architecture devops


【解决方案1】:

复制的答案来自:https://github.com/angular/angular-cli/issues/17874#issuecomment-640568824

ConcatenateModules 用于提升作用域,这会导致两件事,更小的包大小和更快的浏览器中的代码执行。

如果真的想禁用不推荐的concatenateModules,可以使用ngx-build-plus.

从 CLI 的角度来看,公开禁用 concatenateModules 的方法超出了范围,因为我们不希望用户选择退出关键运行时性能和包大小优化。

Read More

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多