有關(guān)啟動時間
啟動方式
- 冷啟動:當(dāng)應(yīng)用啟動時水醋,后臺沒有該應(yīng)用的進(jìn)程渐白,這時系統(tǒng)會重新創(chuàng)建一個新的進(jìn)程分配給該應(yīng)用借杰, 這種啟動方式就叫做冷啟動碟婆。(即后臺不存在該應(yīng)用進(jìn)程)
- 熱啟動:當(dāng)應(yīng)用已經(jīng)被啟動后电抚, 后續(xù)按下返回鍵、Home鍵等回到桌面或者跳轉(zhuǎn)至其他程序時竖共,二次打開該app的方式叫做熱啟動蝙叛。(即后臺已經(jīng)存在該應(yīng)用進(jìn)程,系統(tǒng)要做的就是將活動再次置于前臺)
參考鏈接--https://developer.android.com/topic/performance/vitals/launch-time#cold
啟動時間
-
當(dāng)前「iOS啟動時間」計算的是冷啟動時間公给,在APP首次啟動以后拿到初始幀渲染(Initial Frame Rendering)完成的時間點借帘,其間APP啟動大致分為以下幾個過程:
探究過程
有關(guān)iOS啟動時間的探究,初始方向有以下幾種:
-
利用WebDriverAgent工具去實現(xiàn)啟動APP的操作淌铐,調(diào)用系統(tǒng)API去錄屏肺然。通過輸出視頻的前后幀變化來判定是啟動完成,從而記錄啟動時間腿准。
- 優(yōu)點:對APP重簽名际起、iphone設(shè)備的證書沒有限制,且適用范圍廣吐葱。
- 缺點:過程很繁瑣街望,而且依據(jù)前后幀不變做判定不是個穩(wěn)定的條件,開屏過程中可能出現(xiàn)其他前后幀相同的情況唇撬。
-
通過埋點來計算啟動時間它匕。記錄點擊APP-icon埋點的觸發(fā)時間點、APP首頁某個組件埋點曝光結(jié)束的時間點窖认,再計算時間差作為啟動時間豫柬。
- 優(yōu)點:啟動時間可信度較高
- 缺點:依賴開發(fā)對APP進(jìn)行埋點
-
通過Instruments命令行工具計算啟動時間。利用Instruments命令行調(diào)用APP生成.trace文件扑浸,通過開源工程TraceUtility對.trace文件進(jìn)行解析烧给。
- 優(yōu)點:命令行工具易用性高,且有現(xiàn)有工程可以利用
- 缺點:輸出的.trace文件是二進(jìn)制格式喝噪,只能用可視化Instruments工具查看础嫡。想要至為可視化文件,需要TraceUtility工程利用dSYM文件解析對.trace文件進(jìn)行解析酝惧。但TraceUtility實質(zhì)是個iOS工程榴鼎,調(diào)用了Instruments部分私有API,僅對Xcode 10.0以下版本支持晚唇。
-
通過XCTrace命令行工具計算啟動時間巫财。
- 優(yōu)點: 同是命令行工具,相比較Instruments工具哩陕,可輸出可視化的文件格式
- 缺點: 需要UDID在開發(fā)者賬號下的iphone和開發(fā)者證書的包平项,且開發(fā)者賬號與開發(fā)者證書要一致(即所屬budleID要一致)赫舒。
XCTrace探究過程
XCTrace生成.trace文件shell命令
xcrun xctrace record --template 'App Launch' --device '對應(yīng)的deciceID' --output ~/Downloads/test.trace --launch XXXX.app'
該命令中--template參數(shù)為想要記錄的模版,為了計算啟動時間我選擇的是'App Launch'闽瓢。--device參數(shù)為Iphone的UDID接癌,當(dāng)然也可以選擇Iphone的設(shè)備名稱。-
對.trace文件進(jìn)行解析扣讼,拿到對應(yīng)的記錄結(jié)構(gòu)缺猛。
xcrun xctrace export --input ~/Downloads/test.trace --toc
該步驟是為了拿到.trace文件中記錄了哪些schema名(可以簡單理解成.trace將所有數(shù)據(jù)以很多張表的形式進(jìn)行記錄,輸出的schema就是每張表的名稱)届谈,作為想要可視化的xpath輸入枯夜。
XCTrace解析.trace文件弯汰,輸出可視化艰山。
xcrun xctrace export --input ~/Downloads/test.trace --xpath '/trace-toc/run[@number="1"]/data/table[@schema="life-cycle-period"]' >> test.xml
該步驟的schema即是上一步拿到的模式名,我選取的是'life-cycle-period'咏闪。-
XML文件分析及取值曙搬。
先用Instruments桌面端工具將記錄的.trace文件打開。
觀察發(fā)現(xiàn)在'Initial Frame Rendering'和'Running in the foreground'進(jìn)程間有段空置時間鸽嫂,因此不能拿取'Running in the foreground'的開始時間纵装,而是拿取'Initial Frame Rendering'的完成時間。
只需要將該進(jìn)程的開始時間'start-time'及'duration'相加即可据某。
待改進(jìn)點
由于蘋果爸爸的權(quán)限管控橡娄,目前只能運用于未重簽名的包
當(dāng)前只是冷啟動的時間,熱啟動時間還未拿到癣籽。