APP的啟動流程與優(yōu)化

聲明:

本文旨在學習APP啟動流程并著力優(yōu)化本公司項目,部分知識點非自創(chuàng),如各位大佬發(fā)現(xiàn)本文存在抄襲侵權之處琢感,請及時指出改正丢间,謝謝!

一驹针、背景

APP的啟動一般分為冷啟動和熱啟動烘挫。

1、冷啟動:當用戶啟動應用程序時柬甥,后臺沒有該應用程序的進程饮六,這時系統(tǒng)會重新給應用程序分配一個進程,這種方法就叫冷啟動苛蒲。
2卤橄、熱啟動:當用戶啟動應用程序時臂外,后臺已經(jīng)有了該程序的進程(通過home鍵退出)當再次點開APP馬上能夠恢復到上次使用的狀態(tài)窟扑,不需要再回到手機的首頁打開應用程序,這個方式就叫熱啟動寄月。
3辜膝、熱啟動通常不需要優(yōu)化,APP的啟動流程優(yōu)化一般指的是冷啟動優(yōu)化漾肮。
APP的冷啟動大致分為三個階段
1厂抖、APP的啟動加載(從點擊APP到執(zhí)行main()函數(shù))

APP啟動加載流程

2、APP的初始化(從main()函數(shù)執(zhí)行到didFinishLaunchingWithOptions方法執(zhí)行)
3克懊、APP的運行時生命周期(從didFinishLaunchingWithOptions函數(shù)執(zhí)行到首屏渲染結束)
App啟動流程示意圖

啟動流程參考鏈接一
啟動流程參考鏈接二
冷啟動時長是App性能的重要指標忱辅,直接決定著用戶對App的第一印象。隨著越來越多版本的迭代開發(fā)谭溉,產(chǎn)品形態(tài)不斷完善墙懂,業(yè)務功能日趨復雜,在App冷啟動的時候需要完成更多更復雜的功能扮念,這給App的冷啟動性能帶來了挑戰(zhàn)损搬。因此,對冷啟動進行優(yōu)化工作柜与,提高用戶體驗巧勤,是一項重要的工作。

二弄匕、APP的啟動流程

1颅悉、啟動加載項(pre-main)

當我們點擊APP時,XNU內(nèi)核(提供基礎服務迁匠,像線程剩瓶,進程管理驹溃,進程間通信,文件管理)先將我們的App加載進內(nèi)存延曙,之后加載一個“中間件”:dyld這是(開源地址)豌鹤。之后dyld會負責分析App的Mach-O文件(Exectuable文件、Dylib:動態(tài)庫搂鲫、Bundle傍药、Image、Framework: 包含資源文件魂仍、頭文件等的dylib)以加載所需的dynamic libraries拐辽。之后利用Rebasing和Binding修正內(nèi)部和外部指針指向。最后加載runtime組件擦酌,runtime組件加載好后就會向需要初始化的object發(fā)送消息俱诸,開始初始化。 至此赊舶,main函數(shù)之前的步驟結束睁搭。之后App開始在AppDelegate里面初始化我們自定義的服務以及渲染首屏等。

Dyld所做的事情

優(yōu)化方式

dyld 3已經(jīng)做了大部分優(yōu)化(在dyld 2時代笼平,所有我們之前提到的啟動步驟都是發(fā)生在內(nèi)核分配給你的進程中的(in-process); 而在dyld 3中园骆,關于Mach-O文件的解析發(fā)生在App第一次安裝或者是之后的更新過程中。解析過后寓调,關于App啟動的信息會被存到磁盤锌唾,供App啟動時使用。這兩步大大提升了App加載的速度夺英,系統(tǒng)庫是有共享緩存的晌涕,所以加載速度會相對較快。)
main()之前的加載過程影響因素大概有下面幾種:
1痛悯、動態(tài)庫加載越多余黎,啟動越慢。
2载萌、ObjC類惧财,方法越多,啟動越慢扭仁。
3可缚、ObjC的+load越多,啟動越慢斋枢。
4经备、C的constructor函數(shù)越多斧蜕,啟動越慢。
5松捉、C++靜態(tài)對象越多,啟動越慢戈次。
針對以上幾點轩勘,可以做如下一些優(yōu)化工作。
1怯邪、代碼瘦身
把無用的方法和類刪除一下绊寻。
2、+load優(yōu)化
目前項目中存在一些+load方法悬秉,如果不是非必須加載可以刪掉或者換成+initialize方法(+load和+initialize的區(qū)別)澄步。
3、優(yōu)化耗時操作(借助Instrument工具的Time Profiler插件)
啟動時減少圖片資源的處理
減少動畫圖片組的數(shù)量和泌,替換大圖資源等村缸。
推遲執(zhí)行的一些耗時任務。

2武氓、初始化(main)

1.執(zhí)行main 的函數(shù)
2.執(zhí)行UIApplicationMain的方法
2.1 會創(chuàng)建UIApplication對象梯皿,并設置它的代理
2.2 會開啟一個事件循環(huán)(主運行循環(huán)即死循環(huán),保證程序不退出)
2.3 加載info.plist
2.4 通知應用程序代理县恕,應用程序啟動完畢东羹,執(zhí)行didFinishLaunchingWithOptions
(這個階段一般都是必做的事 優(yōu)化空間不大)。

3忠烛、APP的運行時生命周期(didFinishLaunchingWithOptions)

過程是從AppDelegate的didFinishLaunchingWithOptions方法到首頁離屏渲染結束属提。
梳理出來didFinishLaunchingWithOptions方法到第一個主界面導致延遲加載的原因并改進。例如網(wǎng)絡數(shù)據(jù)的加載况木,界面的加載垒拢,第三方SDK的初始化,新版本彈窗檢查火惊,廣告彈窗檢查等求类。


廣告頁加載優(yōu)化示意圖
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屹耐,隨后出現(xiàn)的幾起案子尸疆,更是在濱河造成了極大的恐慌,老刑警劉巖惶岭,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寿弱,死亡現(xiàn)場離奇詭異,居然都是意外死亡按灶,警方通過查閱死者的電腦和手機症革,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸯旁,“玉大人噪矛,你說我怎么就攤上這事量蕊。” “怎么了艇挨?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵残炮,是天一觀的道長。 經(jīng)常有香客問我缩滨,道長势就,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任脉漏,我火速辦了婚禮苞冯,結果婚禮上,老公的妹妹穿的比我還像新娘鸠删。我一直安慰自己抱完,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布刃泡。 她就那樣靜靜地躺著巧娱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烘贴。 梳的紋絲不亂的頭發(fā)上禁添,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音桨踪,去河邊找鬼老翘。 笑死,一個胖子當著我的面吹牛锻离,可吹牛的內(nèi)容都是我干的铺峭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼汽纠,長吁一口氣:“原來是場噩夢啊……” “哼卫键!你這毒婦竟也來了?” 一聲冷哼從身側響起虱朵,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤莉炉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碴犬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體絮宁,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年服协,在試婚紗的時候發(fā)現(xiàn)自己被綠了绍昂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窘游,靈堂內(nèi)的尸體忽然破棺而出卖陵,到底是詐尸還是另有隱情,我是刑警寧澤张峰,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站棒旗,受9級特大地震影響喘批,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铣揉,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一饶深、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逛拱,春花似錦敌厘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至曹步,卻和暖如春宪彩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讲婚。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工尿孔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筹麸。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓活合,卻偏偏與公主長得像,于是被迫代替她去往敵國和親物赶。 傳聞我的和親對象是個殘疾皇子白指,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容