アプリのパフォーマンスを向上させる Xcode Instruments の使用法
Xcode Instruments は、Xcode に無料で付属している開発者用ツールです。 アプリを検査し、改善するための多くの便利なツールがあります。 5618>
このブログ投稿では、Xcode Instruments を使用して、Collect by WeTransfer アプリの重要な部分のパフォーマンスをどのように向上させたかを紹介します。 その結果、「写真をインポートする」以降の部分が劇的に改善されました。
ご覧のとおり、インポートのポップアップは旧バージョンではかなり長く表示され、最終的な共有シートもかなり遅れています。
アプリのこの部分が優れていれば、それだけアプリはより良いパフォーマンスを示すことになります。
それでは、このフローをどのように改善したかを見ていきましょう!
Xcode Instruments とは? これは、Create ML や Accessibility Inspector などのツールを含む Xcode ツール セットの一部です。
- ソース コードの問題を追跡する
- アプリのパフォーマンスを分析する
- メモリの問題を見つける
その他多数!
Xcode Instruments にアクセスするにはどうすればよいですか。
Xcode メニューから Product ➔ Profile
を使用し、ショートカット ハンドル ⌘ + I
を使用して、インストルメントにアクセスできます。 5618>
各インストルメントの使用方法を知っておくべきですか。 それぞれは非常に貴重なものですが、すべてのアプリに必要なわけではありません。 ゲーム パフォーマンス測定器のように、ゲームを開発している場合にのみ価値がある測定器もあります。
シミュレータで測定器を使用できますか。
ほとんどの測定器はシミュレータで実行できますが、そうすることは常に推奨されるわけではありません。
Using the Xcode Instruments Time Profile to investigate and improve the performance
The Time Profiler instrument gives insights into the system’s CPUs and how effective multiple cores and threads are used in the system. アプリのこの部分が優れていればいるほど、アプリのパフォーマンスが向上します。
Collect アプリのパフォーマンスの例では、アプリにコンテンツを追加するフローを高速化することを目標としていました。
Time Profiler Instrument を使用して新しい記録を作成する
Time Profiler Instrument を選択したら、左上の赤いボタンまたは ⌘ + R
を使用して、新しい記録を開始できます。
改善したいフローが終了したら、記録を停止して結果に飛び込むことができます。 まず、メイン スレッドがどのように使用されるかを知りたいと思います。 5618>
Using filters to create an overview of threads
Threads タブを選択すると、フィルター バーを使用して概要を絞り込み、使用されているスレッドに関するより良い洞察を得ることができます。 下にスクロールすると、メイン スレッドが頻繁に使用され、他のスレッドはそれほど忙しくないことがわかります。
コードのどの部分を最適化できるかを特定する
⌘ + D
を使用して詳細領域を表示しない場合は、それを開くようにします。 これには、ハイライトされた期間のシンボル名が表示されます。 前の例では、グラフのピークが青でハイライトされているのがわかります。
最初は、詳細領域のシンボル名を見ていると、かなり使い物にならないように見えます:
詳細領域の右側には Heaviest Stack Trace がありますが、Call Tree 入力フィルターを使用してさらに良い概観を得ることができます。 5618>
Hide system libraries で開始し、制御できない、最適化できない低レベルのシンボルをすべて削除します。 ご覧のように、Heaviest Stack Trace の概要はすでにかなりきれいになっています。
次は Invert Call Tree フィルターで、各コール ツリーをクリックしなくてもトップレベルのメソッドを表示できるようにします。 Weight カラムでのソートと組み合わせて、どのメソッドを最適化すべきかを正確に確認できます。
PHImageManager
コードが、合計 11.16 秒から 3.36 秒かかり、最もパフォーマンスが悪いことは明らかです。 5618>
もう 1 つ気づいたことは、テスト中のフローでは何もしていないにもかかわらず、常に高さを再計算している BucketHeaderView
です。
結果を検証する
コードを改善したら、タイム プロファイラーを再実行して結果を検証し、実際に改善されたかどうかを確認する必要があります。
先に共有したビフォー/アフター ビデオですでに改善点を確認しましたが、同じフローに最も重いスタック トレースとして PHImageManager
が含まれていないことも確認できます。
ヘッダーも再計算されなくなり、フローのパフォーマンスが向上しました。
結論
Xcode Instruments には、アプリのパフォーマンスを改善するための貴重なツールがたくさん含まれています。 タイム プロファイラーは、特定のフローに飛び込み、コードの一部を改善し、直後に検証するために使用できます。
利用可能なツールに飛び込んで、どれがいつ役に立つかを知り、アプリの改善に着手してください。 もし、さらに改善したいのであれば、ビルド パフォーマンスの改善に関する私のブログ投稿も読んでみてください!
。