Angular CLIの予算とは何ですか?
予算は、Angular CLIのあまり知られていない機能の1つです。それはかなり小さいですが、非常にきちんとした機能です!
アプリケーションの機能が大きくなると、アプリケーションのサイズも大きくなります。予算はAngular CLIの機能の1つで、構成に予算のしきい値を設定して、アプリケーションの一部が設定した境界内に収まるようにすることができます — 公式ドキュメント
または言い換えると、Angularアプリケーションを、ビルドプロセスによって生成されるバンドルと呼ばれるコンパイル済みJavaScriptファイルのセットとして説明できます。Angularバジェットを使用すると、これらのバンドルの予想サイズを構成できます。さらに、警告を受信したい場合や、バンドルサイズが制御不能になった場合にエラーでビルドを失敗させたい場合の条件にしきい値を設定できます。
予算を定義するには?
角度予算は、angular.jsonファイルで定義されています。ワークスペース内のすべてのアプリには異なるニーズがあるため、予算はプロジェクトごとに定義されます。
実用的に考えると、プロダクションビルドの予算を定義するだけで意味があります。製品ビルドは、ツリーのシェイクやコードの最小化などのすべての最適化を適用した後、「実際のサイズ」のバンドルを作成します。
作成エラーです。バンドルの最大サイズを超えました。これは、問題が発生したことを知らせる優れたシグナルです...
- 機能を試してみたが、適切にクリーンアップできなかった
- 私たちのツールはうまくいかず、不良な自動インポートを実行するか、推奨されるインポートのリストから不良アイテムを選択します
- 不適切な場所にある遅延モジュールからデータをインポートする可能性があります
- 私たちの新機能は非常に大きく、既存の予算に収まりません
最初のアプローチ:ファイルはgzip圧縮されていますか?
一般的に、gzip圧縮されたファイルのサイズは元のファイルの約20%にすぎないため、アプリの初期読み込み時間を大幅に短縮できます。ファイルをgzip圧縮したかどうかを確認するには、開発者コンソールのネットワークタブを開きます。「Response Headers」に「Content-Encoding:gzip」が表示されている場合は、問題ありません。
gzipする方法?
ほとんどのクラウドプラットフォームまたはCDNでAngularアプリをホストしている場合、おそらくこの問題に対処しているため、この問題について心配する必要はありません。ただし、Angularアプリを提供する独自のサーバー(NodeJS + expressJSなど)がある場合は、ファイルがgzip圧縮されているかどうかを必ず確認してください。以下は、NodeJS + expressJSアプリで静的アセットをgzipする例です。この完全に単純なミドルウェアの「圧縮」によってバンドルのサイズが2.21MBから495.13KBに削減されるとは、ほとんど想像できません。
const compression = require('compression')
const express = require('express')
const app = express()
app.use(compression())
2番目のアプローチ:: Angularバンドルを分析する
バンドルのサイズが大きくなりすぎる場合は、不適切な大型のサードパーティパッケージを使用したか、使用しないパッケージを削除するのを忘れたために、バンドルを分析する必要がある場合があります。Webpackには、webpackバンドルの構成を視覚的に理解できる素晴らしい機能があります。
このグラフを取得するのは非常に簡単です。
npm install -g webpack-bundle-analyzer
- Angularアプリで実行します
ng build --stats-json
(フラグは使用しないでください--prod
)。有効に--stats-json
すると、追加のファイルstats.jsonが取得されます
- 最後に、実行する
webpack-bundle-analyzer ./dist/stats.json
と、ブラウザがlocalhost:8888のページをポップアップします。楽しんでください。
ref 1:Angular CLIの予算は私の日をどのように節約し、どのようにしてあなたの日を節約できるか
参照2:4ステップでAngularバンドルサイズを最適化する