Chromeデバッガーのプロファイラーの「(プログラム)」とは何ですか?


回答:


95

(program)Chrome自体、他のすべてのコードを呼び出すツリーのルートです...ネイティブコードからJavaScriptへのジャンプ、リソースの読み込みなどがどこかで開始する必要があるため、そこにあります :)

ツリービューの例は、Chromeデベロッパーツールのドキュメントで確認できます。


43
ああ、それでそれが高いパーセントの場合、それについて私が何かできることはありますか?
hvgotcodes

2
@hvgotcodes-下のすべての部分のパーセンテージであるように思えます。自己パーセンテージが高い場合、できることはあまりありません。マークアップが一般的に非常に重い場合を除きます。
Nick Craver

1
「(プログラム)」セクションのコードにアクセスする方法を知っていますか?どういうわけか、私が現在取り組んでいるプロジェクトのJavaScriptの一部は、最終的にはそこに到達し、デバッガーでそこに到達する唯一の方法は、「デバッガー」を配置することです。コードに入れます。これはあまり快適ではありません。
JaroslavZáruba12

6
これは実際には間違っていると思います。@ user1009908の答えは正しいです。これはルートではなく、ネイティブコードです。これは、ツリービューの例ではルートとして表示されないという事実によってサポートされています。
studgeek 2014年

3
program()の割合が高い場合、cssアニメーションによってCPU使用率が高くなることがあり、これはprogram()に反映されます。残念ながら、プロファイラーはソースを特定するのに役立ちません。
ılǝ

31

(プログラム)はツリーのルートではなく、ネイティブコードであると思います。

このスレッドを参照してください:

https://bugs.webkit.org/show_bug.cgi?id=88446

つまり、main()よりもシステムコールに似ています。

どうやらそれはアイドル時間を含みます。また、(プログラム)の一部のプロファイリングは、chrome:// profiler /から利用できます。


7
同意-しかし、単なる更新:アイドル時間は含まれなくなりました。これは(アイドル)として個別に報告されています
ジオジュン

15

@Nickが言うように、どこかから始めなければなりません。

CPUプロファイラーの部分は、gprofと同じ概念に基づく他の多くのプロファイラーのようです。

たとえば、自分で編集できるいくつかのコードに大きな配列のバブルソートのようなものが存在しない限り、selfはほとんど役に立たない数値です。ありそうもない。

合計は呼び出し先を含める必要があるため、より便利です。ただし、ブロックされている時間と実行時間の間にサンプルが取得されない限り、完全にCPUにバインドされたプログラムを除いて、それはまだかなり役に立ちません。

コードの行ではなく、関数ごとにこれらの統計を提供します。つまり、(合計パーセントに頼ることができる場合)関数のコストがかかることを意味します。スタブなどの方法でなんとかして時間をゼロにできる場合、そのパーセントは節約できる時間です。

したがって、コストのかかる関数に焦点を当てる場合は、最適化できるものを探して関数内を探す必要があります。そのためには、関数内のコード行間で時間を細分する方法を知る必要があります。コード行ごとにコストがかかっていた場合、それらの行に直接移動します。

Zoomなど、ラインレベルで報告する実時間のスタックサンプラーなど、より優れたプロファイラーを入手できるかどうかはわかりません。ここに私がそれをする方法があります


@hvgotcodes:わかりません。デバッガでスタックショットを撮るだけなので、私はそれらを使用しません。しかし、あなたはLinuxを使用していますよね?Zoomの体験版を入手できますか?それはかなり良いことです。
マイクダンレイビー

@hvgotcodes:それで、私が提供できる唯一の助けは、私が信頼する方法です。
Mike Dunlavey、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.