App啟動過慢,有哪些因素?


首先,需要清楚App的啟動過程

1、解析 Info.plist

·加載相關信息,例如閃屏

·沙箱建立、權限檢查

2、Mach-O加載

·如果是胖二進制文件,尋找適合當前CPU類別的部分

·加載所有依賴的Mach-O文件(遞歸調用Mach-O加載的方法)

·定位內部、外部指針引用,例如字符串、函數等

·執行聲明為__attribute__(constructor)的C函數

·加載類擴展(category)中的方法

·C++靜態對象加載、調用OC的+load函數

3、程序執行

·調用main()函數

·調用UIApplicationMain()函數

  1)創建UIApplicationDelegate對象

  2)創建UIApplicationDelegate對象並復制

  3)讀取配置文件Info.plist,設置程序啟動的一些屬性

  4)創建應用程序的Main Runloop循環

·調用applicationWillFinishLaunching

  1)程序啟動成功之后,首先調用Application:didFinishLaunchingWithOptions:方法,如果Info.plist文件中配置了啟動storyboard文件名,則加載storyboard文件。如果沒有配置,則根據代碼來創建UIWindow-->UIWindow的rootViewController-->顯示

 

然后,影響啟動性能的因素有:

1、main()函數之前耗時的影響因素

·動態庫加載越多,啟動越慢

·OC類越多,啟動越慢

·C的constructor函數越多,啟動越慢

·C++靜態對象越多,啟動越慢

·OC的+load越多,啟動越慢

2、main()函數之后耗時的影響因素

·執行main()函數的耗時

·執行applicationWillFinishLaunching的耗時

·rootViewController及其childViewController的加載、view及其subviews的加載

 

借鑒方案:

針對今日頭條這個App我們可以優化的點如下:

·純代碼方法而不是storyboard加載首頁UI

·對didFinishLaunching里面的函數考慮是否可以延遲加載或者懶加載,需要與各個業務方共同check,對於一些已經下線的業務,刪除冗余代碼

·對於一些與UI展示無關的業務,如微博認證過期檢查、圖片最大緩存空間設置等做延遲加載。對實現了+load()方法的類進行分析,盡量將load里的代碼延后調用

·上面統計數據顯示展示feed的導航控制器頁面(NewsListViewController)比較耗時,對於viewDidLoad以及viewWillAppear方法中盡量去嘗試少做、晚做、不做。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM