iOS App啟動優(yōu)化(二)—— 使用“Time Profiler”工具監(jiān)控App的啟動耗時

前言:
最近,小編在看戴銘老師的技術(shù)分享,感覺收獲很多?;谧罱膶W(xué)習(xí),小編總結(jié)了一些App啟動優(yōu)化上的知識點,并計劃落地一系列App啟動優(yōu)化的文章。

目錄如下:
iOS App啟動優(yōu)化(一)—— 了解App的啟動流程
iOS App啟動優(yōu)化(二)—— 使用“Time Profiler”工具監(jiān)控App的啟動耗時
iOS App啟動優(yōu)化(三)—— 自己做一個工具監(jiān)控App的啟動耗時


上一篇介紹了App的完整啟動流程和優(yōu)化思路,本篇將介紹如何查看App啟動耗時以及 “使用Xcode內(nèi)置性能調(diào)優(yōu)工具 Instruments 之 TimeProfiler 監(jiān)控App各階段耗時”。

一、查看耗時

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

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

直接打開Xcode,找到Product->Scheme->Edit Scheme->Run->Arguments->Environment Variables->DYLD_PRINT_STATISTICS 設(shè)置為 YES

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

(2)查看Main()函數(shù)后的花費時間

查看Main函數(shù)之后的耗時,目前有兩種方案:

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

  • 方案二:對objc_msgSend方法進(jìn)行hook,來得到所有方法的耗時。

注:hook是指在原有方法開始執(zhí)行時,換成你指定的方法(用RuntimeMethod Swizzle / Facebook開源的fishhook框架)。或在原有方法的執(zhí)行前后,添加執(zhí)行你指定的方法。從而達(dá)到改變指定方法的目的。
(PS:關(guān)于fishhook,推薦閱讀一篇博客:fishhook原理

使用方案一的TimeProfiler查看Main函數(shù)后耗時,方法如圖:


二、Time Profiler的基本使用

  • 第一步,打開工程,連接真機。
    (PS:一定要用真機調(diào)試,因為模擬器使用的是電腦的CPU,并不能檢測出真正的性能問題。)

  • 第二步,打開Xcode,Product -> Profile。

  • 第三步,選擇 Time Profiler。
  • 第四步,這時,你會看到Time Profiler的界面。具體說明如下:
  • 第五步,根據(jù)自己的需要,配置一下Call Tree

注:
1 . Separate by State:按狀態(tài)分開,分析數(shù)據(jù)。
2 . Separate by Thread:按線程分開,分析數(shù)據(jù)??烧页鰢?yán)重消耗資源的線程,特別對于處理和渲染UI的主線程,一旦主線程受到阻塞,一定會造成App的卡頓。
3 . Invert Call Tree:反向顯示調(diào)用樹。把調(diào)用層級最深的方法顯示在最上面。
4 . Hide System Libraries:隱藏系統(tǒng)級的干擾信息。
5 . Flatten Recursion:合并遞歸。
6 . Top Functions:置頂耗時方法。

  • 第六步,找到耗時的方法,并進(jìn)行針對性優(yōu)化。

最后,我是站在iOS業(yè)界巨人的肩膀上完成了App啟動優(yōu)化(一)、(二)、(三),感謝戴銘老師精彩的技術(shù)分享。
另附上,戴銘老師課程鏈接:《iOS開發(fā)高手課》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容