フレームチャートはパフォーマンスのプロファイリングを行っている間、ミリ秒ごとにコードの JavaScript スタックの状態を表示します。
これは記録中の任意の時点でどの関数を実際に実行しているか、またどれだけの期間実行したか、さらにどこから呼び出されたかを知る手段を提供します。
呼び出しツリーとフレームチャートはどちらもサイトの JavaScript を分析するために使用します。またどちらも、記録している間定期的に取得する JavaScript エンジンのスタックのサンプルをデータとして使用します。
しかし、呼び出しツリーは記録全体の合計に対してプログラムのどこでもっとも多くの時間がかかっているかを示すためにこれらのデータを編成するのに対して、フレームチャートは記録中のどこで特定の関数を実行していたかを示すためにこれらのデータを使用します。本質的には、記録中の任意の位置のコールスタックの状態を表示します。
こちらは、プロファイルの一部分のフレームチャートを示したスクリーンショットです:
始めに記録の概要ペインで、フレームチャートに表示したい記録の一部分を選択していることがわかるでしょう。フレームチャートは大量のデータを表示しており、見やすい結果を得るためには通常、ズームインが必要です。
フレームチャートビュー自体は、X 軸に沿って時間を表します。前出のスクリーンショットでは、1435ms から 1465ms の間を表示しています。Y 軸に沿ってその時点のコールスタックに存在する関数を、上にトップレベル、下に葉の関数の順に並べます。関数は区別しやすいように色分けします。
これは記録中の任意の時点でどの関数を実際に実行しているか、またどれだけの期間実行したか、さらにどこから呼び出されたかを知る手段を提供します。
ズームとパン
フレームチャートを効果的に使用するため、ナビゲーションできることが必要でしょう。フレームチャートのナビゲーションに使用できる主要な操作が 2 つあります:
ズーム: プロファイル全体のうち、フレームチャートに表示する選択範囲を増減します。 |
1) フレームチャート上でマウスホイールを上下に回します。 2) フレームチャート上で、トラックパッドで 2 本の指を上下に動かします。 |
パン: プロファイル全体内で、選択範囲を左右に動かします。 |
1) 記録の概要ペインで、選択範囲をクリック・アンド・ドラッグします。 2) フレームチャートでクリック・アンド・ドラッグします。 |
例
フレームチャートがプログラムの動作をどのように明らかにできるかを見るため、シンプルな例を見ていきましょう。呼び出しツリーのページとで使用したものと同じサンプルを使用します。これは、3 種類の異なるソートアルゴリズムを比較するものです。このプログラムの構造の概要は、別のページで説明しています。
ここでは、呼び出しツリーで使用したものと同じプロファイルのファイルを使用します。呼び出しツリーのページではプロファイル内のプログラム呼び出しグラフと、関連付けられたサンプル数を以下のように明らかにしました:
sortAll() // 8 -> sort() // 37 -> bubbleSort() // 1345 -> swap() // 252 -> selectionSort() // 190 -> swap() // 1 -> quickSort() // 103 -> partition() // 12
始めに、ぷろぐらむがアクティブであった部分の全体を選択します:
最上段の紫色の箇所は sortAll()
の呼び出しであり、プログラムの始めから終りまで実行されています。その下にあるオリーブグリーン色は、sort()
を呼び出しています。さらに下にあるくしの歯のようなものは、それぞれのソートアルゴリズムを実行する呼び出しです。
ズームしましょう:
この部分は約 140 ミリ秒間です。また、sort()
が呼び出した関数をより詳しく示しています。sort()
のコードは以下のようなものです:
function sort(unsorted) { console.log(bubbleSort(unsorted)); console.log(selectionSort(unsorted)); console.log(quickSort(unsorted)); }
"bubb..." と記載されたオリーブグリーン色のマーカーは、おそらく bubbleSort()
です。緑色のマーカーは、おそらく別のソートアルゴリズムです。ひと目見ただけで、バブルソートのブロックが他のアルゴリズムより幅が広い (存続時間が長い) ことがわかります。
また、bubbleSort()
から呼ばれている関数 (紫色) がいくつかあることもわかります。
もう一度ズームしましょう:
この部分は約 20 ミリ秒間です。bubbleSort()
の下にある紫色のマーカーは、swap()
の呼び出しであることがわかります。それらをすべて数えると 253 個あることが、呼び出しツリービューで示されています。ズームした範囲内ではすべて bubbleSort()
の下にありますが、呼び出しツリービューによればプロファイル内で 1 個は selectionSort()
の下にあります。
また、緑色のマーカーのうち 2 個は selectionSort()
および quickSort()
であることがわかる一方で、ソート関数の呼び出しの合間にプラットフォーム (Gecko) のコードを呼び出していることもわかります。これは、sort()
内で console.log()
を呼び出していることに由来する可能性が高いと考えられます。