Xcode / Instruments / Time Profilerを使用してReact Nativeソースコードをプロファイルする方法


19

私たちはReact Native 0.59.10とReact-Redux 5.0.7を使用しており、CPUにバインドされたパフォーマンスの問題が発生しています。この問題では、Reduxアクションが完了するまでに0.25秒かかります。

InstrumentsのTime Profiler構成を使用してプロファイルを作成しましたが、JSコードはシンボリック化されていません。

Chromeでのリモートデバッグは、「リモートインスペクター」ページをデバッグするだけのようで、まったく役に立ちません。

JS関数名/呼び出しに、ソースマップを作成/アタッチする方法、または以下に表示されるメモリアドレスを記号化する方法はありますか?

Instruments Callstack


expoを使用している場合は、アプリをChromeで直接実行し、そこでデバッグできます。
Mykybo

いいえ、かなりの数のネイティブコンポーネントを使用しているため、Expoはオプションではありません。
Craig Otis

回答:


1

Firefoxプロファイラー

Firefoxプロファイラーについて

Firefoxプロファイラには、profiler.firefox.com / docs /で入手可能な最新のドキュメントがあります。しかしながら、以下はGecko特有の問題に関していくつかの潜在的に有用な情報を持っているかもしれません。

Firefoxプロファイラに関するよくある質問をいくつか確認できます。

パフォーマンスの問題の報告には、Firefox開発者から要求されたときにプロファイルを取得するための段階的なガイドがあります。

1.タイムライン

タイムラインには、興味深いイベントを示すトレースマーカー(色分けされたセグメント)の複数の行があります。それらにカーソルを合わせると、詳細情報が表示されます。トレースマーカーの下には、さまざまなスレッドでのアクティビティに対応する行があります。

ヒント:「[デフォルト]」で注釈されたスレッドは親プロセス(別名「UI」、別名「ブラウザクロム」、別名「メイン」)にあり、「[タブ]」で注釈されたスレッドはWebコンテンツ(別名「子」)プロセス。

ここに画像の説明を入力してください

ヒント:親プロセスで長時間実行されるタスクは、ブラウザーUI(別名「UIジャンク」)ですべての入力または描画をブロックしますが、コンテンツプロセスで長時間実行されるタスクは、ページとの対話性をブロックしますが、ユーザーはパンおよびAPZのおかげでズームしてください。

マーカーの追跡

Red:これらは、イベントループが応答していないことを示しています。ここには、vsyncなどの優先度の高いイベントは含まれていません。これは、待機中のイベントがあった場合に何が起こったかを示し、必ずしもその間保留されているイベントがあったわけではないことにも注意してください。

Black:これらは同期IPC呼び出しを示します。

2.呼び出しツリー

ここに画像の説明を入力してください

呼び出しツリーには、「実行時間」で編成されたサンプルが表示され、壁時計時間ごとにデータが表示されます。ツリー要素の右側には、コードの出所を示す薄い灰色の名前があります。要素はJavaScript、Gecko、またはシステムライブラリからのものである可能性があることに注意してください。一部の関数がまだ適切に名前付けされていない場合、シンボリック化がまだ完了していない可能性があることに注意してください。

ヒント:関数名を右クリックして、その名前をクリップボードにコピーするオプションを取得できます。

3.プロファイルの共有 [共有...]> [共有]をクリックします。開いたURLとFirefox拡張機能がサーバーに送信されるプロファイルデータに含まれることを確認して共有します。別の時間範囲を選択すると、[パーマリンク]を押して表示されるURLが変化するため、URLの受信者が表示されているものと同じものを確実に見ることができます。


FirefoxプロファイラーはSafariまたはChromeプロファイラーとは異なる動作をしますか?私の経験では、実行中のReact Nativeアプリケーションではなく、リモートデバッグタブ/ページ自体をプロファイルします。
Craig Otis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.