听说使用 Angular 17 的新建构系统可以使构建速度提高100倍,所以我尝试了一下

上个月发布了 Angular 的新版本,即 Angular 17。
在功能方面,添加了新的代码流程和构建系统,在 Signal 方面也得到了稳定版本的更新,有着重大的进步。
此外,还有大量的品牌改变,包括标志的变更和新的文档站点,该站点配备了能运行 Angular 的沙盒功能等。

听说 Angular 17 的新构建系统非常快,我实际验证了一下。

有很多不同的 Angular 构建系统。

Angular有多个构建器,包括用于客户端渲染(CSR)和服务器端渲染(SSR)的选项。

角度开发工具的构建器

ビルダー説明@angular-devkit/build-angular:browserCSR用のビルダー@nguniversal/builders:dev-serverCSR用の開発サーバー@nguniversal/builders:ssr-dev-serverSSR用の開発サーバー@angular-devkit/build-angular:browser-esbuildesbuild で動作するCSR用のビルダー
Angular 14から追加され、長らく開発者プレビューだった@angular-devkit/build-angular:applicationesbuildで動作するCSRとSSR用のビルダー
Angular 17から追加され、CSRとSSRの両方で使える
Angular 17 からはこれがデフォルトになる@angular-devkit/build-angular:ng-packagrAngular Package Formatに準拠したAngularライブラリ用のビルダー

在这些选项中,browser-esbuild和application中使用了esbuild,而其他选项使用了webpack。
以前只能在CSR构建中使用esbuild,但是使用Angular 17新增的application构建器,现在可以在SSR构建中使用esbuild。

从现在开始,这个构建工具将成为Angular的默认工具(但似乎并不意味着传统的webpack构建将被淘汰)。

因为从webpack切换到esbuild,构建时间大幅缩短。
简单地解释两者的区别是,

webpack 是什么

webpack 是一款将多个 JavaScript 文件合并成一个文件并输出的工具。
在客户端开发中,它是最著名的模块打包工具之一。
长期以来,它一直支持着现代前端开发。但是近年来,配置文件的复杂性和性能问题成为了它的瓶颈,其他模块打包工具正在夺取它的市场份额。

 

esbuild 是什么

一个与webpack相同的模块捆绑器之一。
由Go语言编写,因此具有高速运行的特点。
根据官方描述,据说比webpack快10到100倍。

 

在这个领域,多年来webpack一直很受欢迎。然而,由于配置文件的复杂性和性能问题,近年来出现了许多解决这些问题的新模块打包工具。

スクリーンショット 2023-12-04 1.27.25.png

esbuild 是其中之一。
关于 esbuild 速度的秘密在许多网站上有详细解释,请参考那里。

 

@angular-devkit/build-angular:如何使用该应用程序

现在,esbuild已经成为Angular 17的标准选项。
但是,要在现有系统中使用新的构建系统,需要进行一些步骤。

我们一边确认步骤,一边进行与传统建筑商的性能验证。

顺便提一下,所需的步骤已在官方文件中记录。

 

前提:需要是 Angular 17 或以上的版本。

首先,让我们升级至Angular 17。

 

操作步骤

1. 修改 angular.json 中的 builder

用中文表达的话,可以说:
这个。

...
"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:browser",
...

这样做

...
"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:application",
...

2. 改变构建目标选项

我会修改 angular.json 中的构建目标选项的以下参数。

main を browser に変更する。

polyfillsを単一のファイルではなく、配列にする。

buildOptimizerを削除する。

resourcesOutputPathを削除する。

vendorChunkを削除する。

commonChunkを削除する。

deployUrl を削除する。代わりに を使用する。詳細は公式のデプロイメントドキュメントを参照。

ngswConfigPath を serviceWorker に変更する。

 

3. 建造

现在可以像以前一样使用 ng build 进行构建。

尝试实际建立后的结果

ビルド回数旧 (webpack)新 (esbuild)1回目47.371 sec17.158 sec2回目17.801 sec16.347 sec3回目14.474 sec16.480 secビルドサイズ5.06 MB5.01 MB

虽然没有达到原先的100倍,但是在没有缓存的情况下,首次构建的时间大幅缩短了。从第二次开始,由于有缓存的作用,结果与webpack并没有太大差别。另外,构建的大小也没有太大变化。

总结

这次的加速主要是因为从webpack切换到esbuild的原因。
因此,如果您已经使用@angular-devkit/build-angular:browser-esbuild,请将其更改为@angular-devkit/build-angular:application,但速度可能不会提升到这个程度。
如果您正在使用webpack或在SSR中进行构建,强烈建议您升级到Angular 17,效果会非常显著。

广告
将在 10 秒后关闭
bannerAds