iOS App啓動優化(二)—— 使用「Time Profiler」工具監控App的啓動耗時

級別:★☆☆☆☆
標籤:「iOS」「啓動流程」「啓動優化」
做者: 647
審校: QiShare團隊php


前言:
最近,小編在看戴銘老師的技術分享,感受收穫不少。基於最近的學習,小編總結了一些App啓動優化上的知識點,並計劃落地一系列App啓動優化的文章。

目錄以下:
iOS App啓動優化(一)—— 瞭解App的啓動流程
iOS App啓動優化(二)—— 使用「Time Profiler」工具監控App的啓動耗時
iOS App啓動優化(三)—— 本身作一個工具監控App的啓動耗時git


上一篇介紹了App的完整啓動流程和優化思路,本篇將介紹如何查看App啓動耗時以及 「使用Xcode內置性能調優工具 Instruments 之 TimeProfiler 監控App各階段耗時」。github

1、查看耗時

(1)查看Pre-Main()階段花費的總時間

想查看Pre-Main階段的時間比較簡單。微信

直接打開Xcode,找到Product->Scheme->Edit Scheme->Run->Arguments->Environment Variables->DYLD_PRINT_STATISTICS 設置爲 YES框架

Run一下,就能看到pre-Main的耗時日誌啦~ide

(2)查看Main()函數後的花費時間

查看Main函數以後的耗時,目前有兩種方案:函數

  • 方案一:定時抓取主線程方法的調用堆棧,計算一段時間裏的方法耗時。(Xcode中的Time Profiler就是使用的這種的方法)工具

  • 方案二:對objc_msgSend方法進行hook,來獲得全部方法的耗時。性能

注:hook是指在原有方法開始執行時,換成你指定的方法(用RuntimeMethod Swizzle / Facebook開源的fishhook框架)。或在原有方法的執行先後,添加執行你指定的方法。從而達到改變指定方法的目的。 (PS:關於fishhook,推薦閱讀一篇博客:fishhook原理學習

使用方案一的TimeProfiler查看Main函數後耗時,方法如圖:


2、Time Profiler的基本使用

  • 第一步,打開工程,鏈接真機。 (PS:必定要用真機調試,由於模擬器使用的是電腦的CPU,並不能檢測出真正的性能問題。)

  • 第二步,打開XcodeProduct -> Profile

  • 第三步,選擇 Time Profiler

  • 第四步,這時,你會看到Time Profiler的界面。具體說明以下:

  • 第五步,根據本身的須要,配置一下Call Tree

注:
1 . Separate by State:按狀態分開,分析數據。
2 . Separate by Thread:按線程分開,分析數據。可找出嚴重消耗資源的線程,特別對於處理和渲染UI的主線程,一旦主線程受到阻塞,必定會形成App的卡頓。
3 . Invert Call Tree:反向顯示調用樹。把調用層級最深的方法顯示在最上面。
4 . Hide System Libraries:隱藏系統級的干擾信息。
5 . Flatten Recursion:合併遞歸。
6 . Top Functions:置頂耗時方法。

  • 第六步,找到耗時的方法,並進行鍼對性優化。


小編微信:可加並拉入《QiShare技術交流羣》。

關注咱們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公衆號)

推薦文章:
iOS App啓動優化(一)—— 瞭解App的啓動流程
iOS WKWebView的基本使用
Swift 5.1 (4) - 集合類型
iOS 解析一個自定義協議
iOS13 DarkMode適配(二)
iOS13 DarkMode適配(一)
2019蘋果秋季新品發佈會速覽
申請蘋果開發者帳號的流程
Sign In With Apple(一)
奇舞週刊

相關文章
相關標籤/搜索