プロファイリング

このセクションでは、ボトルネックを特定するための Rspack のプロファイリング方法について説明します。Rspack が時間を費やしている場所を調べることで、パフォーマンスを向上させる方法についての洞察を得ることができます。プロファイラにはそれぞれ長所と短所があるため、複数を使用することが推奨されます。

トレース

Rspack のインストルメンテーションには tracing が使用されます。

サポートされているトレースレベル:

  • リリースビルド:INFOWARNERROR
  • デバッグビルド:TRACEDEBUGINFOWARNERROR

トレースを有効にする方法:2通りあります

Chrome

トレース情報をグラフィカルに表示するには、tracing-chrome がサポートされています。

image

例として、Rspack を実行する前に環境変数 RSPACK_PROFILE=TRACE=layer=chrome を設定します。

RSPACK_PROFILE=TRACE=layer=chrome rspack build

これにより、現在の作業ディレクトリにトレースファイル(.rspack-profile-${timestamp}-${pid}/trace.json)が生成されます。

JSON トレースファイルは、chrome://tracing または ui.perfetto.dev で表示できます。

ターミナル

例として、RSPACK_PROFILE=TRACE=layer=logger を使用すると、詳細なトレースイベント値をターミナルで表示できます。

RSPACK_PROFILE=TRACE=layer=logger rspack build

これにより、Rspack に渡されたオプションと、個々のトレースイベントが出力されます。

Node.js プロファイリング

パフォーマンスのボトルネックがJS側にある場合(例:jsローダー)、JS側をさらに分析する必要があります。Node.jsプロファイリングを使用して分析できます。例:

node --cpu-prof {rspack_bin_path} -c rspack.config.js

または

RSPACK_PROFILE=JSCPU rspack build

これにより、CPU.20230522.154658.14577.0.001.cpuprofileのようなCPUプロファイルが生成され、speedscopeを使用してプロファイルを見ることができます。例:

npm install -g speedscope
speedscope CPU.20230522.154658.14577.0.001.cpuprofile

Rsdoctor タイムライン

ローダーとプラグインの処理時間、またはローダーのコンパイル動作を分析する場合は、Rsdoctor を使用して確認できます。

image

Rsdoctor コンパイル分析 を参照してください。

Mac Xcode Instruments

Mac を使用している場合は、Xcode Instruments を使用して CPU プロファイルを作成できます。

image

Xcode Instruments をインストールするには、コマンドラインツールをインストールするだけです。

xcode-select --install

通常の Rust ビルドの場合、cargo instruments をプロファイリングとトレースファイル作成のつなぎとして使用できます。

Rspack のビルドには時間がかかるため、cargo instruments を呼び出さずに次の手順を使用できます。効果は同じです。

ワークスペースルートの Cargo.toml で、[profile.release] セクションでデバッグシンボルを有効にし、シンボルストリッピングを無効にします。

[profile.release]
debug = 1 # debug info with line tables only
strip = false # do not strip symbols

プロジェクトをビルドします。

pnpm run build:cli:release

プロジェクトがビルドされると、最終的なバイナリは packages/rspack-cli/bin/rspack に配置されます。

内部的には、cargo instrumentsxcrun コマンドを呼び出します。つまり、Rspack を使用する独自のプロジェクトで次のコマンドを実行できます。

xcrun xctrace record --template 'Time Profile' --output . --launch -- /path/to/rspack/packages/rspack-cli/bin/rspack build

次の出力が生成されます。

Time Profiler テンプレートを使用して記録を開始します。プロセスを開始しています: rspack。Ctrl-C で記録を停止します。ターゲットアプリが終了しました。記録を終了しています... 記録が完了しました。出力ファイルを保存しています... 出力ファイルが保存されました: Launch_rspack_2023-04-24_11.32.06_9CFE3A63.trace

トレースファイルは次のように開くことができます。

open Launch_rspack_2023-04-24_11.32.06_9CFE3A63.trace