啟動優(yōu)化思考
在面試時遇到這個問題,很多人信手拈來,上來就說:+load、減少離屏渲染、二進制重排等。不得不說,針對這個問題,這確實很重要的一環(huán),對于工作 3 年左右的工程師沒有任何問題,但對于 > 5 年的高級研發(fā)工程師,是不是顯得思考、方案不夠系統(tǒng)化呢?(記?。好嬖嚂r面試、蓋樓是蓋樓,我們可以稍微系統(tǒng)化思考一下這個問題)
5W2H 簡單思考一下
- Why:為什么需要做這件事,表面上是需要完成任務(wù),但是我們可以去剖析對方讓我們完成這件事背后的意義所在;
- What:啟動優(yōu)化到底是個什么樣的事情?是如何定義的?啟動怎么算開始?怎么算結(jié)束?
- Who:誰來做最合適方便?(誰被忽略了?誰是決策人?誰會受益?)
- When:立項什么時候開始,什么時候結(jié)束?
- Where:何處?在哪里做?從哪里入手?如:我們做哪個 app?是否可遷移到其他端等
- How:怎么做?
- How much:做到什么程度?數(shù)量如何?是否可量化?如何量化?
為什么做(Why)
- 上級安排?
- 用戶反饋 app 慢、卡?
- 還是我們可感知的慢、卡(定性)?
- 還是通過各種數(shù)據(jù)對比(橫向 app 對比,各種技術(shù)方案對比)發(fā)現(xiàn)慢、卡(定量)?
啟動定義(What)
System Interface(Dyld 加載共享庫和框架、初始化系統(tǒng)底層組件等) -> Runtime 初始化 -> UIKit 初始化 -> Application 初始化 -> 首幀 -> 用戶可交互
建立指標(How much)
第一個 +load(如:n 個 A 的動態(tài)庫中的 +load) or 進程創(chuàng)建時間等 -> 首頁渲染完成(如:hook *** layoutSubviews + dispatch_async、動畫結(jié)束等,對于視頻類 app,視頻啟播第一幀可能更好)
優(yōu)化方向(How)
- 避免寫 +load(減少缺頁中斷等)
-
二進制重排(減少缺頁中斷等)
** 思考1:如何分析啟動時缺頁中斷次數(shù)?
** 思考2:order_file 是什么?怎么來?怎么用? - 非首屏必需的任務(wù)(延后)
** 非必需啟動的任務(wù):延后調(diào)度
** 非首屏內(nèi)容:延后加載、繪制 - 首屏必需任務(wù)(提優(yōu)、加速)
** 數(shù)據(jù)層
****** 提升首頁請求優(yōu)先級、預加載、本地緩存
****** 數(shù)據(jù)解析時加載圖片、視頻等
** UI 層
****** 利用數(shù)據(jù)加載的空閑時間預渲染預渲染
****** 減少離屏渲染
防止劣化
- 上線前:自動化測試對比
- 上線后:線上監(jiān)控