Profilerタブでは、Angularの変更検知の実行を視覚化できます。 これは、変更検知がいつどのようにアプリケーションのパフォーマンスに影響を与えるかを判断するのに役立ちます。
プロファイラタブでは、現在のアプリケーションのプロファイリングを開始したり、以前の実行からの既存のプロファイルをインポートしたりできます。 アプリケーションのプロファイリングを開始するには、Profilerタブの左上隅にある丸の上にマウスを置いて、Start recordingをクリックします。
プロファイリング中は、Angular DevToolsは、変更検知やライフサイクルフックの実行などの実行イベントをキャプチャします。 変更検知をトリガーしてAngular DevToolsが使用できるデータを作成するために、アプリケーションと対話してください。 記録を終了するには、丸を再びクリックしてStop recordingします。
既存の記録のインポートもできます。 この機能の詳細については、記録のインポートセクションをご覧ください。
アプリケーションの実行の理解
プロファイルを記録またはインポートした後、Angular DevToolsは変更検知サイクルの視覚化を表示します。
シーケンスの各バーは、アプリケーションの変更検知サイクルを表しています。 バーが高いほど、アプリケーションは変更検知をこのサイクルで実行するのに時間がかかっています。 バーを選択すると、DevToolsは次のような役立つ情報を表示します。
- このサイクルでキャプチャされたすべてのコンポーネントとディレクティブを含むバーチャート
- Angularが変更検知をこのサイクルで実行するのにかかった時間。
- ユーザーが経験した推定フレームレート(60fps未満の場合)
コンポーネント実行の理解
変更検知サイクルをクリックすると表示されるバーチャートは、アプリケーションがその特定のコンポーネントまたはディレクティブで変更検知を実行するのにどれだけ時間がかかったかを示す詳細ビューを表示します。
この例では、NgForOfディレクティブでかかった合計時間と、そのディレクティブで呼び出されたメソッドが表示されています。
階層ビュー
変更検知の実行をフレームグラフのようなビューで視覚化できます。
グラフの各タイルは、レンダリングツリーの特定の位置にある画面上の要素を表します。
たとえば、LoggedOutUserComponentが削除され、その代わりにAngularがLoggedInUserComponentをレンダリングした変更検知サイクルを考えます。このシナリオでは、両方のコンポーネントは同じタイルに表示されます。
X軸は、この変更検知サイクルのレンダリングにかかった合計時間を表します。 Y軸は要素階層を表します。要素の変更検知を実行するには、そのディレクティブと子コンポーネントをレンダリングする必要があります。 これらを組み合わせると、どのコンポーネントのレンダリングに時間がかかっているのか、その時間がどこに使われているのかが視覚化されます。
各タイルは、Angularがそこでかかった時間に依存して色が付けられます。 Angular DevToolsは、レンダリングに最も時間がかかったタイルに対するかかった時間によって、色の濃淡を決定します。
特定のタイルをクリックすると、右側のパネルにそのタイルに関する詳細が表示されます。 タイルをダブルクリックすると、タイルが拡大され、ネストされた子要素をより簡単に表示できます。
変更検知とOnPushコンポーネントのデバッグ
通常、グラフは、特定の変更検知フレームの、アプリケーションのレンダリングにかかる時間を視覚化します。しかし、OnPushコンポーネントなど、入力プロパティが変更された場合にのみ再レンダリングされるコンポーネントもあります。特定のフレームのこれらのコンポーネントなしでフレームグラフを視覚化すると役立つ場合があります。
変更検知フレーム内で変更検知プロセスを経たコンポーネントのみを視覚化するには、フレームグラフの上部にある変更検知チェックボックスをオンにします。
このビューでは、変更検知を経たすべてのコンポーネントが強調表示され、再レンダリングされなかったOnPushコンポーネントなど、変更検知を経なかったコンポーネントが灰色で表示されます。
記録のインポートとエクスポート
記録されたプロファイリングセッションの右上にあるSave Profileボタンをクリックして、JSONファイルとしてエクスポートし、ディスクに保存します。 後で、プロファイラの初期ビューで、Choose file入力をクリックしてファイルをインポートします。