天天看點

iOS--APP啟動優化(筆記)

内容概要:
  1. APP啟動過程的内容
  2. APP冷啟動過程的優化【功能級别優化、方法級别優化】
  3. 總結

APP啟動過程的内容

app的啟動分為冷啟動和熱啟動。所謂的冷啟動,就是一次完整的啟動,即從系統配置設定一個程序給APP到APP啟動的到首屏的一個過程;熱啟動,就是指在APP使用過程中,使用者傳回到桌面之後,從桌面再傳回回來APP的一次啟動,即中途啟動的一個過程。

冷啟動:完整的一次啟動

熱啟動:使用過程中傳回背景,然後從背景進入APP的一次啟動

冷啟動的過程包括三個部分:

  1. main()執行前
  2. main()執行後
  3. 首屏渲染完成後

main()執行前執行哪些:

a. 加載可執行檔案
b. 加載動态連結庫
c. objc運作時的初始處理
d. 初始化(包括執行+load()方法,attribute((constructor))修飾的函數的調用、建立C++靜态全局變量等)
           

main()執行後執行哪些:(從main() 到didFinishLaunchingWithOptions方法)

a. 首屏初始化所需配置檔案的讀寫操作
b. 首屏清單大資料的讀取
c. 首屏渲染的大量計算等
           

首屏渲染完成後執行哪些:

非首屏其他業務服務子產品的初始化、監聽的注冊、配置資訊的讀取等
           

APP啟動過程的優化

【功能級别優化】

  1. main()執行前優化
    a.  減少動态庫加載
     b.  減少加載啟動後不會去使用的類或者方法
     c.  減少C++全局變量的數量
     d.  +load()方法裡的内容可以放到首屏渲染完成後再執行,或用+initialize()方法替換。
               
  2. main()執行後(從main() 到didFinishLaunchingWithOptions方法)
    隻處理首屏相關業務,其他非首屏業務的初始化、監聽注冊、配置檔案讀取等都放到首屏渲染完成後再做。
               
  3. 首屏渲染完成後
    1. 其他業務基礎功能初始化
     2. 其他服務初始化
     3. 監聽注冊
               

【方法級别優化】

  1. 監控耗手段
    a.定時抓取主線程上的方法調用堆棧,計算一段時間裡各個方法的耗時
     b.對objc_msgSend進行hook,掌握所有方法的執行耗時。
               
  2. 檢查首屏有哪些耗時的方法,對其進行優化

    耗時情況1:如加載、編輯、存儲圖檔、檔案等資源

    耗時情況2:進行運作時方法替換操作會帶來時間消耗,如+load()執行有4毫秒的延遲。

總結

首先了解了啟動的概念。然後根據啟動的特性,我們劃分為三個階段。通過三個階段的分析,了解三個階段的特性。最後根據我們的業務需求,在功能上對其進行梳理,梳理出哪些是APP啟動時必要的初始化功能,哪些是首屏渲染必要的初始化功能,哪些是對應功能開始使用時才需要初始化的功能。将其對應滞後處理,完成啟動的優化。

繼續閱讀