本文是對戴銘專欄中“App 啟動速度怎么做優(yōu)化與監(jiān)控?”的小結(jié)。
1 啟動時(shí),app都做了什么
1-1 main前
- 加載可執(zhí)行文件(.o的集合)
?2. 加載dylb, 做符號綁定,rebase指針 - Runtime初始處理,類注冊等
- load()、靜態(tài)全局變量
1-2 main后
進(jìn)入main -到> didFinishLaunching首屏渲染相關(guān)方法執(zhí)行完
首屏渲染所需的操作:配置文件、數(shù)據(jù)、計(jì)算
1-3 首屏渲染完成后
app所需的操作:配置文件、注冊監(jiān)聽、其他初始化
2 優(yōu)化
簡單說,讓main少做事,尤其是渲染前。
如
- 減少load方法
- 注冊監(jiān)聽、其他模塊初始化等操作后移(已體現(xiàn)在第一節(jié)中)
3 監(jiān)控
3-1 原理
- 定時(shí)抓主線程調(diào)用棧
- ?hook objc_msgsend
3-2 工具
- Time Profiler
根據(jù)3-1中原理1 實(shí)現(xiàn)的。
精度不夠高,但基本夠用,成本低。 - fishhook