如何加快app的啟動時間

1.啟動時間的計算

一個app的啟動時間可以劃分為兩部分:main執行之前的時間+mian執行之后的時間(main函數到第一個界面渲染完的時間)。

完整的啟動時間的劃分:

t1:main函數執行之前 ? ? ? 冷啟動

t2:main函數執行到applicationDidFinishLaunching執行完成

t3:app完成所有本地數據的加載并顯示在界面上

t4:app發送網絡請求并將數據顯示在界面上

t1+t2決定了用戶需要多長時間能看到主視圖

t1+t2+t3決定了用戶需要多長時間能看到有用的信息

t1+t2+t3+t4決定了用戶用多長時間能看到所有想要的信息

我們這里主要討論的是t1和t2的優化!

2.為什么要優化t1

冷啟動就是在app被kill掉以后,從頭開始啟動消耗的時間,對于一些小型的app來說,優化冷啟動時間是沒有必要的,冷啟動時間的優化對于大的app(動態庫很多,類很多)來說是非常重要的。main函數執行之前消耗的時間與下面幾個因素有關:

動態庫的數量,動態庫加載的越多啟動越慢。

objc類的數量,數量越多啟動越慢。

構造函數數量,數量越多,啟動越慢。

靜態對象越多加載越慢。

load越多,啟動越慢。

cocoapods 里引用的第三方框架數量

3.冷啟動的過程和優化

冷啟動時間的長度是可以在Xcode里打印出來的,設置環境變量DYLD_PRINT_STATISTICS為yes,勾選“Dynamic Library Loads”,這樣在程序運行的時候就可以看到冷啟動時間。

冷啟動大體可以分為以下幾個過程:Load dylibs => Rebase/Binding => ObjC => Initializers

翻譯成漢語就是:動態庫的加載->指針重定位->ObjC類的初始化->其他的初始化

針對這幾個過程能做的優化其實是有限的,主要還是要根據系統自身的特點,去制定優化的目標,如果說系統對程序啟動時間要求很高,要求很快就啟動起來,那可以適當的減少動態庫的數量,減少類的數量。

掃描不再使用的類,動態庫,函數,把他們刪除。

系統級的動態庫的加載是不需要優化的,因為他們已經高度優化了。重點是開發者自己繼承到程序的動態庫,對此Apple建議減少在App里開發者的動態庫集成或者有可能地將其多個動態庫最終集成一個動態庫后進行導入, 盡量保證將App現有的非系統級的動態庫個數保證在6個以內。

盡量不要使用load方法,用initializer方法去代替,因為所有類和分類的load方法都在main函數執行之前執行,增加了t1部分的時長。那些需要在整個程序執行過程中只做一次的操作都放到dispatch_once方法里去做。

4.t2部分的優化

t2部分的時間是main函數開始執行到applicationDidFinishLaunching方法執行結束,執行完之后用戶就可以看到第一個主界面了。

這部分的優化核心在于優化applicationDidFinishLaunchingWithOptions方法,這個方法里一般做什么事呢,一般都是一些第三發sdk的配置,rootViewController的設置。

??:在applicationDidFinishLaunchingWithOptions這個方法里,方法的執行順序很重要,因為在這個方法里面要先執行控制器的viewDidLoad方法,這個方法才能執行完,執行完了才能去渲染界面。所以如果viewDidLoad方法里做了很多的事,那么app的啟動到渲染第一個界面的時間間隔非常長。

對于這個方法的優化思路:把要處理的時間分類,那些必須在app一打開就初始化的內容放到applicationDidFinishLaunchingWithOptions方法里初始化。

參考:將初始化分為三個類型:

日志、統計等必須在 APP 一起動就最先配置的事件

項目配置、環境配置、用戶信息的初始化 、推送、IM等事件

其他 SDK 和配置事件

對于第一類,由于這類事件的特殊性,所以必須第一時間啟動,仍然把它留在 didFinishLaunchingWithOptions 里啟動。第二類事件,這些功能在用戶進入 APP 主體的之前是必須要加載完的,所以我們可以把它放在第二批,也就是用戶已經看到廣告頁面,再進行廣告倒計時的時候再啟動。第三類事件,由于不是必須的,所以我們可以放在第一個界面渲染完成以后的 viewDidAppear 方法里,這里完全不會影響到啟動時間。

5.對于第一個界面渲染的優化

渲染第一個界面的時候,先顯示一個空殼的界面,用戶不會覺得界面卡住了,然后把請求數據,加載數據,解析等操作放到viewDidAppear方法來做,因為如果都放到viewDidLoad方法里那就會一直執行didFinishLaunchingWithOptions方法不會去渲染第一個界面,用戶可能覺得應用卡住了。

這一部分參考了網上很多優秀的文章,記錄一下

參考文章:

優化 App 的啟動時間? ?這個是楊蕭玉講的,講了很多的底層知識不太好理解

[iOS]一次立竿見影的啟動時間優化? 這個里講的t2的優化很詳細

iOS App 啟動性能優化? 這個都講了,又具體又全面

WWDC 之優化 App 啟動速度? 這個主要講t1的優化,比較泛泛

Optimize App Startup Time? 自己發現的一個iOS獨立開發者的博客,很開心??

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,775評論 25 708
  • 生活如刀。 我似蘿卜。 生活應該是一種狀態。 一種活在世間的狀態。 每個人的狀態不一樣,自然生活也不一樣。 生活也...
    智叔隨筆閱讀 735評論 0 0
  • 結婚真的好劃算! 文 / 木棉 他和她住在城市兩端,一南一北,工作地點恰好都在城市中心。雖然都工作好多年,各自手上...
    一株木棉花閱讀 314評論 0 3
  • 01/聰明人更容易分心 朋友公司有一同事,且叫大衛,平時編程比別人要慢,需求需要仔細畫圖解說幾遍,才能理解??墒沁@...
    鹿小其閱讀 2,727評論 0 2