App啟動過慢,有哪些因素?
首先,需要清楚App的啟動過程
1、解析 Info.plist
·載入相關資訊,例如閃屏
·沙箱建立、許可權檢查
2、Mach-O載入
·如果是胖二進位制檔案,尋找適合當前CPU類別的部分
·載入所有依賴的Mach-O檔案(遞迴呼叫Mach-O載入的方法)
·定位內部、外部指標引用,例如字串、函式等
·執行宣告為__attribute__(constructor)的C函式
·載入類擴充套件(category)中的方法
·C++靜態物件載入、呼叫OC的+load函式
3、程式執行
·呼叫main()函式
·呼叫UIApplicationMain()函式
·呼叫applicationWillFinishLaunching
然後,影響啟動效能的因素有:
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方法中儘量去嘗試少做、晚做、不做。