轉(zhuǎn)自:http://blog.csdn.net/face___book/article/details/50808620
Time Profiler分析原理:它按照固定的時間間隔來跟蹤每一個線程的堆棧信息册着,通過統(tǒng)計比較時間間隔之間的堆棧狀態(tài)壤短,來推算某個方法執(zhí)行了多久,并獲得一個近似值嚼摩。其實從根本上來說與我們的原始分析方法異曲同工灶体,只不過其將各個方法消耗的時間統(tǒng)計起來阅签。
現(xiàn)在先看一下每一部分的說明
1、這里控制記錄過程蝎抽,點擊紅色的"記錄"按鈕可以停止或開始當(dāng)前正在分析的app(在記錄和停止按鈕之間切換)愉择,暫停鍵,如你所想,暫停當(dāng)前正在運行的app锥涕。
2衷戈、這里是執(zhí)行計時器(run timer),計時器記錄著正在分析的app執(zhí)行了多長時間层坠、執(zhí)行了多少次殖妇。如果你使用記錄控制按鈕來停止你的app,然后重啟破花,這將創(chuàng)建一個新的運行記錄谦趣,同時會顯示"Run 2 of 2"。
3座每、這里被稱作路徑(track)前鹅,就你選擇的Time Profiler工具而言,因為只有一個工具峭梳,所以這里只有一條路徑舰绘,關(guān)于這里顯示的圖標(biāo)的詳情,一會你就會在接下來的教程中了解更多葱椭。
4捂寿、這里是詳情面板,展示的是你正在使用的工具的主要信息孵运。就現(xiàn)在而言秦陋,這里展示的是最"笨重(hottest)"的方法--換句話說,占用CPU時間最長的方法治笨。點擊上方的bar會看到Call Tree(左手邊的那個)并選中Sample List驳概,然后你會看到數(shù)據(jù)的不同視圖。視圖展示了每一個示例旷赖。點擊其中幾個抡句,你會在Extended Detail inspector中看到被捕獲的堆棧跟蹤。
5杠愧、這里是檢查器(inspector)面板待榔,一共有三個檢查器:record setting(記錄設(shè)置),display setting(展示設(shè)置)流济,還有extends detail(擴展詳情)锐锣。
Leaks的用法已經(jīng)解釋了call Tree里邊的部分選項作用,這里介紹的全面一點
- Separate by State: 測試了一下绳瘟,選上此選項詳情面板就沒數(shù)據(jù)了雕憔,啥作用不太清除,哈哈糖声。不過沒用斤彼,
- Separate by Thread:每個線程被單獨考慮分瘦。這能讓你知道哪一個線程占用CPU最多。
- Invert Call Tree:選中該選項后琉苇,調(diào)用棧會自上至下顯示嘲玫。這通常是你需要的,因為你想知道CPU花費時間的那個最深的方法并扇。
- Hide System Libraries:選中該選項后去团,只有你自己app中出現(xiàn)的符號會被顯示出來。通常選中該選項是有用的穷蛹,因為你只關(guān)心CPU在你自己的代碼中的哪一部分花費時間土陪,你沒法對系統(tǒng)庫使用CPU做多少改變。
- Flatten Recursion:該選項將每一個調(diào)用棧中的遞歸函數(shù)(調(diào)用它們自身的函數(shù))視作單一入口肴熏,而不是多入口鬼雀。
- Top Functions:選上這一選項讓Instruments將花費在一個函數(shù)中的總時間視作在該函數(shù)中直接花費的時間加上調(diào)用的其他函數(shù)花費的時間。所以如果函數(shù)A調(diào)用了函數(shù)B蛙吏,那么函數(shù)A花費的總時間被記為A花費的時間加上B花費的時間源哩。這一選項非常有用,因為它能讓你在每次進(jìn)入調(diào)用棧時找到花費最長的時間出刷,瞄準(zhǔn)你最耗時的方法。
下面開始看哪些代碼比較耗時了坯辩。
這個操作占首頁加載時間的2.7%馁龟,下邊就去一探究竟嘍。
定位到耗時操作的方法了漆魔,點進(jìn)去看一眼
該方法一步一步點進(jìn)去之后發(fā)現(xiàn)是讀取沙盒的數(shù)據(jù)
大家可以試著把此操作放到子線程里邊操作坷檩,加載速度就明顯提升了。
這里只是用此方法打個比方改抡,(其實這個方法已經(jīng)異步操作了矢炼,哈哈哈)。重在思路你懂得阿纤。哈哈
注意:
性能優(yōu)化是在所有更能實現(xiàn)完成時要做的事句灌,使用Time Profile工具分析app每個流程的執(zhí)行情況,發(fā)現(xiàn)耗時的地方欠拾,合理優(yōu)化胰锌,提升用戶體驗,切記藐窄,優(yōu)化后要做一遍詳細(xì)的測試资昧,要不然別修了東墻壞了西墻。