iOS效能優化 - 工具Instruments之Time Profiler

Simba_LX發表於2018-08-01

一.工欲善其事必先利其器

  • time profile時間分析工具用來檢測應用CPU的使用情況,可以看到應用程式中各個方法正在消耗CPU時間,使用大量CPU不一定是個問題。客戶端中動畫就對CPU依賴就非常高,動畫本身也是非常苛刻且耗費資源較多的任務。

  • Time Profiler幫助我們分析程式碼的執行時間,找出導致程式變慢的原因,告訴我們“時間都去哪兒了?”。

  • Time Profiler分析原理:它按照固定的時間間隔來跟蹤每一個執行緒的堆疊資訊,通過統計比較時間間隔之間的堆疊狀態,來推算某個方法執行了多久,並獲得一個近似值。其實從根本上來說與我們的原始分析方法異曲同工,只不過其將各個方法消耗的時間統計起來。

二.使用Time Profiler前須知

  • 1.當點選Time Profiler應用程式開始執行後.就能獲取到整個應用程式執行消耗時間分佈和百分比.為了保證資料分析在統一使用場景真實行有如下點需要注意:

  • 在開始進行應用程式效能分析的時候,一定要使用真機,模擬器執行在Mac上,然而Mac上的CPU往往比iOS裝置要快。相反,Mac上的GPU和iOS裝置的完全不一樣,模擬器不得已要在軟體層面(CPU)模擬裝置的GPU,這意味著GPU相關的操作在模擬器上執行的更慢,尤其是使用CAEAGLLayer來寫一些OpenGL的程式碼時候. 這就導致模擬器效能資料和使用者真機使用效能資料相去甚運.

  • 2.另外在開始效能分析前另外一件重要的事情是,應用程式執行一定要Release版本 而不是Debug版本.

  • 在釋出環境打包的時候,編譯器會引入一系列提高效能的優化,例如去掉除錯符號或者移除並重新組織程式碼.另iOS引入一種"Watch Dog"[看門狗]機制.不同的場景下,“看門狗”會監測應用的效能。如果超出了該場景所規定的執行時間,“看門狗”就會強制終結這個應用的程式.開發者可以crashlog看到對應的日誌.但Xcode在除錯配置下會禁用"Watch Dog".

三.time profiler的主介面(幾個需要關注的重點區域)

iOS效能優化 - 工具Instruments之Time Profiler

檢視開關:分別為三個檢視的開關,全部選上可達到主介面截圖效果。

搜尋條:如果您需要快速查詢具體的類或函式,可在些輸入類名或者函式名,會有意想不到的效果。

資料視覺化皮膚:可在此設定您需要關注的範圍,以便將不相干的內容過濾掉。

詳情皮膚:在time profiler下主要是看Call Tree和Sample List這兩種檢視,一般使用Call Tree檢視,比較簡單明瞭:

iOS效能優化 - 工具Instruments之Time Profiler

Running Time:函式執行的時間,這個時間是累積時間

Self:在棧頂次數

Symbol Name:被呼叫函式的符號資訊

從詳情皮膚Call Tree與相關內容擴充套件詳情皮膚對應的關係圖:

iOS效能優化 - 工具Instruments之Time Profiler

樣本列表(Sample List)

iOS效能優化 - 工具Instruments之Time Profiler

Timestamp:取樣的開始時間

Dep:堆疊深度

CPU:執行緒執行在那一個CPU上

Process:程式名稱

Thread:所在的執行緒名稱

Hot Frame:取樣中呼叫最多的函式

Responsible Library:呼叫該函式的庫

Responsible Caller:呼叫該函式的函式

選項檢視引數設定

iOS效能優化 - 工具Instruments之Time Profiler

新版本在這裡設定

iOS效能優化 - 工具Instruments之Time Profiler

iOS效能優化 - 工具Instruments之Time Profiler

Separate by Thread(建議選擇):執行緒分離,只有這樣才能在呼叫路徑中能夠清晰看到佔用CPU最大的執行緒.每個執行緒應該分開考慮。只有這樣你才能揪出那些大量佔用CPU的"重"執行緒,按執行緒分開做分析,這樣更容易揪出那些吃資源的問題執行緒。特別是對於主執行緒,它要處理和渲染所有的介面資料,一旦受到阻塞,程式必然卡頓或停止響應。

Invert Call Tree(不建議選擇):呼叫樹倒返過來,將習慣性的從根向下一級一級的顯示,如選上就會返過來從最底層呼叫向一級一級的顯示。如果想要檢視那個方法呼叫為最深時使用會更方便些。

Hide Missing Symbols(建議選擇):隱藏丟失的符號,比如應用或者系統的dSYM檔案找不到的話,在詳情皮膚上是看不到方法名的,只能看一些讀不明的十六進值,所以對我們來說是沒有意義的,去掉了會使閱讀更清楚些。

Hide System Libraries(建議選擇):選上它只會展示與應用有關的符號資訊,一般情況下我們只關心自己寫的程式碼所需的耗時,而不關心繫統庫的CPU耗時。

Flatten Recursion(一般不選):選上它會將呼叫棧裡遞迴函式作為一個入口。

Top Functions(可選):選上它會將最耗時的函式降序排列,而這種耗時是累加的,比如A呼叫了B,那麼A的耗時數是會包含B的耗時數。

四.使用技巧

1.圖示為黑色頭像的就是Time Profiler給我們的提示,有可能存在效能瓶頸的地方

2.按著option鍵在主介面6中通過拖動滑鼠來選擇需要過濾的時間段

3.Command+F查詢過濾的函式名或者類名

4.關聯程式碼

iOS效能優化 - 工具Instruments之Time Profiler

相關文章