學(xué)習(xí)筆記:App 啟動速度怎么做優(yōu)化與監(jiān)控

最近看了戴銘大神的極客時間,來做一些筆記

APP啟動分為冷啟動和熱啟動

  • 冷啟動就是在app點擊啟動前,它的進(jìn)程不在系統(tǒng)里,需要創(chuàng)建分配給他一個進(jìn)程。這就是一次完整的啟動過程
  • 熱啟動,按下Home鍵app退之后臺,在app進(jìn)程的還在系統(tǒng)的狀態(tài),用戶重新進(jìn)入進(jìn)去app的過程

APP啟動三個階段

  1. main()函數(shù)執(zhí)行之前
  2. main()函數(shù)之后
  3. 首屏渲染完成后

main函數(shù)執(zhí)行之前

  1. 加載可執(zhí)行文件(App 的.o 文件的集合)
  2. 加載動態(tài)鏈接庫,進(jìn)行 rebase 指針調(diào)整和 bind 符
  3. 初始化,+load()方法,創(chuàng)建c++靜態(tài)全局全局變量
    這部分可以做的優(yōu)化工作有,減少動態(tài)庫的加載,減少加載啟動后不會去使用的庫和方法,把+load()方法執(zhí)行邏輯放到首屏渲染后或者放在+initialize()里面,控制c++的全局變量數(shù)量

main函數(shù)執(zhí)行之后

這個階段一般是從AppDelegate的applicationDidFinishLaunching的方法到首屏渲染,展示來歡迎界面這個階段。首頁的任務(wù)都是放生在這個階段,一般包括的任務(wù)有:

  1. 首屏初始化所需配置文件的讀寫操作
  2. 首頁列表大數(shù)據(jù)的讀取
  3. 首屏渲染的大量計算等
    這部分可以做的優(yōu)化工作有
  • 將main() 函數(shù)開始執(zhí)行后到首屏渲染完成前只處理首屏相關(guān)的業(yè)務(wù),其他非首屏業(yè)務(wù)的初始化,監(jiān)聽注冊,配置文件文件讀取放到首屏渲染后去做

方法級別的啟動優(yōu)化的監(jiān)控思路

一般統(tǒng)計一個方法的執(zhí)行時間的手段有

  • 定時定時抓取主線程上的方法調(diào)用堆棧,計算一段時間里各個方法的耗時,比如xcode的系統(tǒng)自帶Time Profile就是采用這種方案
  • 對objc_msgSend的方法進(jìn)行hook來監(jiān)控OC大部分方法的執(zhí)行耗時

最后附上戴銘大神的實現(xiàn)工具對oc方法的調(diào)用進(jìn)行監(jiān)控,GCDFetchFeed

?著作權(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)容

  • 本王今日很無聊, 趴臥門前欲望消。 縱有鼠輩當(dāng)街鬧, 自觀心佛志不搖。
    墨趣356閱讀 680評論 15 18
  • 大家好,這里是一周進(jìn)步。 相信熟悉的同學(xué)一定都知道,從七月開始我們每月都會定期整理一份月刊,把當(dāng)月的優(yōu)秀文章再次推...
    一周青年閱讀 1,039評論 2 54
  • 極致男人初長成系列 俗話說,人靠衣裝馬靠鞍,一個人的穿著不僅可以提高顏值,還可以提高一個人的氣質(zhì),讓自己變得更自信...
    智客_尚無極閱讀 391評論 0 1

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