app性能優(yōu)化之Time Profiler工具的使用

前段時(shí)間寫(xiě)的一篇文章
最近做產(chǎn)品商城項(xiàng)目時(shí)翰意,因?yàn)檫@塊經(jīng)常變動(dòng)木人,不可能經(jīng)常提示用戶(hù)下載新版本升級(jí),于是決定用H5來(lái)實(shí)現(xiàn)冀偶,進(jìn)行無(wú)刷新升級(jí)醒第。期間遇到很多問(wèn)題,在兄弟們的努力下进鸠,總于完成了稠曼。沒(méi)事的時(shí)候也喜歡看看上線(xiàn)后的app,一開(kāi)始app剛加載時(shí)就很慢,現(xiàn)在感覺(jué)就更慢了客年,首頁(yè)也不是me寫(xiě)的霞幅,閑來(lái)無(wú)事就分析了一下原因,看看哪些地方占用了時(shí)間量瓜,索性就看看吧司恳。

使用Time Profiler的性能分析方法

Time Profiler分析原理:它按照固定的時(shí)間間隔來(lái)跟蹤每一個(gè)線(xiàn)程的堆棧信息,通過(guò)統(tǒng)計(jì)比較時(shí)間間隔之間的堆棧狀態(tài)绍傲,來(lái)推算某個(gè)方法執(zhí)行了多久扔傅,并獲得一個(gè)近似值。其實(shí)從根本上來(lái)說(shuō)與我們的原始分析方法異曲同工,只不過(guò)其將各個(gè)方法消耗的時(shí)間統(tǒng)計(jì)起來(lái)铅鲤。
和使用 Instruments的其他工具一樣,點(diǎn)擊XCode的Product菜單Profile啟動(dòng)Instruments 然后選擇TimeProfiler

首先枫弟,確保右手邊工具欄上的視圖選擇器的每一個(gè)選項(xiàng)都被選中邢享,如下:

1435031528317977.png

這樣就確保所有的面板都被打開(kāi)。現(xiàn)在看一下下面的截圖和每一部分的說(shuō)明淡诗。
1435031539770546.png

1骇塘、這里控制記錄過(guò)程,點(diǎn)擊紅色的"記錄"按鈕可以停止或開(kāi)始當(dāng)前正在分析的app(在記錄和停止按鈕之間切換)韩容,暫停鍵款违,如你所想,暫停當(dāng)前正在運(yùn)行的app群凶。
2插爹、這里是執(zhí)行計(jì)時(shí)器(run timer),計(jì)時(shí)器記錄著正在分析的app執(zhí)行了多長(zhǎng)時(shí)間请梢、執(zhí)行了多少次赠尾。如果你使用記錄控制按鈕來(lái)停止你的app,然后重啟毅弧,這將創(chuàng)建一個(gè)新的運(yùn)行記錄气嫁,同時(shí)會(huì)顯示"Run 2 of 2"。
3够坐、這里被稱(chēng)作路徑(track)寸宵,就你選擇的Time Profiler工具而言,因?yàn)橹挥幸粋€(gè)工具元咙,所以這里只有一條路徑梯影,關(guān)于這里顯示的圖標(biāo)的詳情,一會(huì)你就會(huì)在接下來(lái)的教程中了解更多蛾坯。
4光酣、這里是詳情面板,展示的是你正在使用的工具的主要信息脉课。就現(xiàn)在而言救军,這里展示的是最"笨重(hottest)"的方法--換句話(huà)說(shuō),占用CPU時(shí)間最長(zhǎng)的方法倘零。點(diǎn)擊上方的bar會(huì)看到Call Tree(左手邊的那個(gè))并選中Sample List唱遭,然后你會(huì)看到數(shù)據(jù)的不同視圖。視圖展示了每一個(gè)示例呈驶。點(diǎn)擊其中幾個(gè)拷泽,你會(huì)在Extended Detail inspector中看到被捕獲的堆棧跟蹤。
5、這里是檢查器(inspector)面板司致,一共有三個(gè)檢查器:record setting(記錄設(shè)置)拆吆,display setting(展示設(shè)置),還有extends detail(擴(kuò)展詳情)脂矫。
在右手邊枣耀,選擇display setting(或者按下commond+2),在該選擇器中庭再,在Call Tree欄下選中Separate by Thread, Invert Call Tree和** Hide System Libraries**選項(xiàng)捞奕,你的界面應(yīng)該看起來(lái)是這樣的:

下面解釋了每一個(gè)選項(xiàng)對(duì)左側(cè)列表中數(shù)據(jù)的顯示起了什么作用:
Separate by Thread:每個(gè)線(xiàn)程被單獨(dú)考慮。這能讓你知道哪一個(gè)線(xiàn)程占用CPU最多拄轻。

Invert Call Tree:選中該選項(xiàng)后颅围,調(diào)用棧會(huì)自上至下顯示。這通常是你需要的恨搓,因?yàn)槟阆胫繡PU花費(fèi)時(shí)間的那個(gè)最深的方法院促。

Hide System Libraries:選中該選項(xiàng)后,只有你自己app中出現(xiàn)的符號(hào)會(huì)被顯示出來(lái)斧抱。通常選中該選項(xiàng)是有用的一疯,因?yàn)槟阒魂P(guān)心CPU在你自己的代碼中的哪一部分花費(fèi)時(shí)間,你沒(méi)法對(duì)系統(tǒng)庫(kù)使用CPU做多少改變夺姑。

Flatten Recursion:該選項(xiàng)將每一個(gè)調(diào)用棧中的遞歸函數(shù)(調(diào)用它們自身的函數(shù))視作單一入口墩邀,而不是多入口。

Top Functions:選上這一選項(xiàng)讓Instruments將花費(fèi)在一個(gè)函數(shù)中的總時(shí)間視作在該函數(shù)中直接花費(fèi)的時(shí)間加上調(diào)用的其他函數(shù)花費(fèi)的時(shí)間盏浙。所以如果函數(shù)A調(diào)用了函數(shù)B眉睹,那么函數(shù)A花費(fèi)的總時(shí)間被記為A花費(fèi)的時(shí)間加上B花費(fèi)的時(shí)間。這一選項(xiàng)非常有用废膘,因?yàn)樗茏屇阍诿看芜M(jìn)入調(diào)用棧時(shí)找到花費(fèi)最長(zhǎng)的時(shí)間竹海,瞄準(zhǔn)你最耗時(shí)的方法。

下面我們來(lái)開(kāi)始分析原因丐黄,這是應(yīng)用第一次進(jìn)入首頁(yè)的詳情面板:



好嘛斋配,占整個(gè)首頁(yè)加載時(shí)間的13% 而且確實(shí)也是商城問(wèn)題導(dǎo)致的,這一塊是解壓縮文件用的灌闺,是個(gè)耗時(shí)的操作艰争,不知有沒(méi)有放在后臺(tái)線(xiàn)程里操作,這里只是一個(gè)具體的方法桂对,我們看看都有誰(shuí)調(diào)用了它甩卓,點(diǎn)擊那一行的左箭頭就可以展開(kāi)查看所有調(diào)用者:


展開(kāi)后看一下最后三行,它在首頁(yè)的 viewdidLoad 方法中在初始化首頁(yè)底部時(shí)蕉斜,加載商城數(shù)據(jù)時(shí)逾柿,調(diào)用的解壓縮操作缀棍,雙擊可以
查看具體代碼實(shí)現(xiàn),我們選中雙擊[Mall initMallConfig:]進(jìn)去后看一下



這是一個(gè)拷貝資源的方法机错,我們跟進(jìn)去看一下:



并沒(méi)有發(fā)現(xiàn)任何開(kāi)啟子線(xiàn)程的操作爬范,那么這個(gè)方法也就是在首頁(yè) viewdidload 方法里面調(diào)用的,代表就是在UI線(xiàn)程進(jìn)行的文件copy
毋庸置疑弱匪,肯定會(huì)導(dǎo)致頁(yè)面卡頓坦敌。
那我們把它放到子線(xiàn)程進(jìn)行操作看看效果:


耗時(shí)的資源壓縮復(fù)制放到后臺(tái)執(zhí)行 首頁(yè)加載從851ms降到了 70ms ,加載速度顯著提升.
總結(jié):性能優(yōu)化是在所有更能實(shí)現(xiàn)完成時(shí)要做的事痢法,使用Time Profile工具分析app每個(gè)流程的執(zhí)行情況,發(fā)現(xiàn)耗時(shí)的地方杜顺,合理優(yōu)化财搁,提升用戶(hù)體驗(yàn),切記躬络,優(yōu)化后要做一遍詳細(xì)的測(cè)試尖奔,要不然別修了東墻壞了西墻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末穷当,一起剝皮案震驚了整個(gè)濱河市提茁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馁菜,老刑警劉巖茴扁,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異汪疮,居然都是意外死亡峭火,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)智嚷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卖丸,“玉大人,你說(shuō)我怎么就攤上這事盏道∩越” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵猜嘱,是天一觀(guān)的道長(zhǎng)衅枫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)朗伶,這世上最難降的妖魔是什么为鳄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮腕让,結(jié)果婚禮上孤钦,老公的妹妹穿的比我還像新娘歧斟。我一直安慰自己,他們只是感情好偏形,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布静袖。 她就那樣靜靜地躺著,像睡著了一般俊扭。 火紅的嫁衣襯著肌膚如雪队橙。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天萨惑,我揣著相機(jī)與錄音捐康,去河邊找鬼。 笑死庸蔼,一個(gè)胖子當(dāng)著我的面吹牛解总,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姐仅,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼花枫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了掏膏?” 一聲冷哼從身側(cè)響起劳翰,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎馒疹,沒(méi)想到半個(gè)月后佳簸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颖变,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年溺蕉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悼做。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疯特,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肛走,到底是詐尸還是另有隱情漓雅,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布朽色,位于F島的核電站邻吞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏葫男。R本人自食惡果不足惜抱冷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梢褐。 院中可真熱鬧旺遮,春花似錦赵讯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸣剪,卻和暖如春组底,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筐骇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工债鸡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铛纬。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓厌均,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親饺鹃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,735評(píng)論 25 707
  • 轉(zhuǎn)自:http://blog.csdn.net/face___book/article/details/50808...
    BetterComingDay閱讀 1,955評(píng)論 0 1
  • 學(xué)習(xí)如何使用【Xcode Instruments】來(lái)進(jìn)行錯(cuò)誤排查和優(yōu)化代碼间雀。 更新提示:這篇教程由James Fr...
    汝陰龍閱讀 1,248評(píng)論 0 1
  • 早餐用兩種雞蛋做了雞蛋羹悔详,左邊是在市場(chǎng)買(mǎi)的土雞蛋(據(jù)說(shuō)是土雞蛋),右邊是奶奶家的小黑雞下的雞蛋惹挟,個(gè)小茄螃,所以用了兩個(gè)...
    橘子OO閱讀 319評(píng)論 0 0
  • 今天,上了輛久違的公交車(chē)连锯。 往日回家归苍,一般一定是打車(chē)的,倒不是說(shuō)手里真的有閑錢(qián)运怖,畢竟只是個(gè)沒(méi)錢(qián)美顏的窮苦學(xué)生拼弃。但現(xiàn)...
    oldpaul閱讀 1,068評(píng)論 0 0