iOS 啟動優(yōu)化

啟動優(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)控
最后編輯于
?著作權(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)容

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