寫在前面:
之前(很久以前)產(chǎn)品跑來說,我們這個(gè)app啟動(dòng)很慢驰坊,需要優(yōu)化下....就有了這篇文章坞笙。關(guān)于這塊的原理梅猿,隨便搜一下就有很多
參考
具體實(shí)現(xiàn)
我們羅列一下需要優(yōu)化的點(diǎn):
1. pre-main():從按下桌面的圖標(biāo)到main函數(shù)獲得控制權(quán)之前的時(shí)間鞋邑。
動(dòng)態(tài)庫加載越多诵次,啟動(dòng)越慢账蓉。
ObjC類,方法越多逾一,啟動(dòng)越慢铸本。
ObjC的+load越多,啟動(dòng)越慢遵堵。
C的constructor函數(shù)越多箱玷,啟動(dòng)越慢。
C++靜態(tài)對(duì)象越多鄙早,啟動(dòng)越慢汪茧。
重新梳理架構(gòu),減少動(dòng)態(tài)庫限番、ObjC類的數(shù)目,減少Category的數(shù)目
定期掃描不再使用的動(dòng)態(tài)庫呀舔、類弥虐、函數(shù)
2. after-main():main函數(shù)獲得控制權(quán)之后,到看到首頁展示媚赖。
didFinishLaunchingWithOptions
里面要做很多初始化的東西霜瘪,關(guān)于這一點(diǎn),我的iOS 小伙伴已經(jīng)做過處理了惧磺。主要是把初始化的東西颖对,按照輕重緩急的順序,分布處理磨隘。
針對(duì)第一點(diǎn)
優(yōu)化前一共用了
Total pre-main time: 323.61 milliseconds (100.0%)
dylib loading time: 29.05 milliseconds (8.9%)//加載動(dòng)態(tài)庫
rebase/binding time: 39.22 milliseconds (12.1%)//指針重定位
ObjC setup time: 42.80 milliseconds (13.2%)//ObjC類初始化
initializer time: 212.42 milliseconds (65.6%)
slowest intializers :
libSystem.B.dylib : 15.74 milliseconds (4.8%)//在初始化耗費(fèi)的212.42ms中缤底,用時(shí)最多的初始化是libSystem.B.dylib占了4.8%
libBacktraceRecording.dylib : 7.29 milliseconds (2.2%)//debug用的一個(gè)追溯庫
libMainThreadChecker.dylib : 11.15 milliseconds (3.4%)//debug時(shí)候檢查線程的,比如你在后臺(tái)線程操作了UI番捂,這個(gè)庫就會(huì)在你的控制臺(tái)打印警告信息
libglInterpose.dylib : 97.03 milliseconds (29.9%)
libMTLInterpose.dylib : 20.23 milliseconds (6.2%)
DaZhuanJia : 80.18 milliseconds (24.7%)
優(yōu)化后:
//也許是Debug模式的原因吧个唧,這個(gè)數(shù)據(jù)的波動(dòng)性很大
Total pre-main time: 283.67 milliseconds (100.0%)
dylib loading time: 44.52 milliseconds (15.6%)
rebase/binding time: 45.97 milliseconds (16.2%)
ObjC setup time: 28.03 milliseconds (9.8%)
initializer time: 164.95 milliseconds (58.1%)
slowest intializers :
libSystem.B.dylib : 3.66 milliseconds (1.2%)
libMainThreadChecker.dylib : 28.64 milliseconds (10.0%)
libglInterpose.dylib : 53.12 milliseconds (18.7%)
libMTLInterpose.dylib : 19.33 milliseconds (6.8%)
DaZhuanJia : 78.86 milliseconds (27.8%)
先刪除項(xiàng)目中不用的類和圖片
- 使用CATClearProjectTool找出未被引用到的類(!I柙ぁ徙歼!記得自己一個(gè)個(gè)文件確認(rèn)好沒有使用在刪除,不要偷懶一鍵刪除)
- 使用LSUnusedResources刪除不用的圖片
我差不多刪除了300個(gè)文件鳖枕。魄梯。。還不算pod里的
然后就是不用的方法和分類的歸并
其實(shí)這部分我們能做的主要就是減少+load()
方法里的事情宾符,關(guān)于刪除沒有使用到的方法問題酿秸,我暫時(shí)還沒有解決。
總結(jié)
其實(shí)這種類型的優(yōu)化吸奴,是一個(gè)日積月累的過程允扇。只有業(yè)務(wù)穩(wěn)定了缠局,項(xiàng)目中的類才能好好的安排下,不然就是過一段時(shí)間又可以刪除300個(gè)文件了