02-App 啟動速度怎么做優(yōu)化與監(jiān)控?

一乞巧、知識點

1.1 App啟動分為冷啟動和熱啟動

  • 冷啟動是指當前App的進程沒有在系統(tǒng)中,需要系統(tǒng)重新分配進程給他啟動摊鸡,是一次完整的啟動過程绽媒。
  • 熱啟動是指App啟動后退到后臺,再重新進入前臺免猾。

1.2 App啟動的三個階段

  • main函數執(zhí)行前
  • main函數執(zhí)行后
  • 首屏渲染完成后

1.3 main函數執(zhí)行前的操作

  • 加載.o可執(zhí)行文件
  • 加載動態(tài)庫
  • Objc運行時初始化是辕,包括相關類的注冊、category注冊猎提、selector唯一性檢查
  • 初始化获三,包括所有+load方法、C++靜態(tài)全局變量

1.4 main函數執(zhí)行后

main函數到appDidFinishLaunchWithOptions中首屏渲染執(zhí)行完成锨苏。

1.5 首屏渲染完成后

appDidFinishLaunchWithOptions中首屏渲染完成到方法作用域結束疙教。

1.6 優(yōu)化方案

  • 功能優(yōu)化:將與首屏無關的功能放到首屏渲染完成之后再去做。
  • 方法優(yōu)化:監(jiān)聽方法耗時伞租,優(yōu)化時間長的方法贞谓。

1.7 監(jiān)聽方法耗時

  • 定時抓取方法堆棧,記錄時長葵诈。定時為0.01最佳裸弦。
  • 對objc_messageSend方法進行hook祟同。

二、課后作業(yè)

上面提到了監(jiān)聽方法耗時的兩種方法理疙。第二種方法在戴銘老師的專欄中有詳細介紹晕城,由于能力有限,沒能弄明白沪斟。這里只實現一下第一種方法广辰。

實現思路

1.寫一個定時器,每0.01秒獲取主線程的方法堆棧主之,并記錄所有方法地址。
2.當下一次定時器獲取的方法堆棧時李根,若方法地址已經存在于記錄中槽奕,則該方法時長加0.01;若記錄中不存在房轿,則初始化方法時長為0.01粤攒。

2.1 如何獲取方法堆棧

這里推薦github上的工具輕量級調用棧分析器
我為他新加了一個方法,返回所有方法地址和方法名的鍵值對集合囱持。

// 獲取主線程方法堆棧中所有方法地址和方法名稱的集合
+ (NSArray<JCStackMethodModel *> *)bs_backtraceMapArrayOfMainThread;

2.2 如何記錄時長

記錄每次抓取到的方法并更新時長

/**
 處理抓取到的方法堆棧
 
 @param methodModels 當前定時間隔堆棧上的方法
 */
- (void)managerCurrentStackMethods:(NSArray<JCStackMethodModel *> *)methodModels {
    // 查看是否在記錄中
    for (JCStackMethodModel *model in methodModels) {
        BOOL isExist = NO;
        for (JCStackMethodModel *existModel in self.stackMethods) {
            // 如果在記錄中夯接,時長+0.01
            if ([model.methodAddress isEqualToString:existModel.methodAddress]) {
                isExist = YES;
                existModel.time += TimeTnterval;
                break;
            }
        }
        // 如果不在記錄中,加入記錄中纷妆,并初始化時長為0.01
        if (!isExist) {
            model.time = TimeTnterval;
            [self.stackMethods addObject:model];
        }
    }
}

最后附上完整代碼

更多詳細內容盔几,請移步至戴銘老師的專欄

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掩幢,隨后出現的幾起案子逊拍,更是在濱河造成了極大的恐慌,老刑警劉巖际邻,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芯丧,死亡現場離奇詭異,居然都是意外死亡世曾,警方通過查閱死者的電腦和手機缨恒,發(fā)現死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轮听,“玉大人骗露,你說我怎么就攤上這事∪锍蹋” “怎么了椒袍?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長藻茂。 經常有香客問我驹暑,道長玫恳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任优俘,我火速辦了婚禮京办,結果婚禮上,老公的妹妹穿的比我還像新娘帆焕。我一直安慰自己惭婿,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布叶雹。 她就那樣靜靜地躺著财饥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪折晦。 梳的紋絲不亂的頭發(fā)上钥星,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音满着,去河邊找鬼谦炒。 笑死,一個胖子當著我的面吹牛风喇,可吹牛的內容都是我干的宁改。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼魂莫,長吁一口氣:“原來是場噩夢啊……” “哼还蹲!你這毒婦竟也來了?” 一聲冷哼從身側響起豁鲤,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤秽誊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后琳骡,有當地人在樹林里發(fā)現了一具尸體锅论,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年楣号,在試婚紗的時候發(fā)現自己被綠了最易。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡炫狱,死狀恐怖巢墅,靈堂內的尸體忽然破棺而出在孝,到底是詐尸還是另有隱情峦嗤,我是刑警寧澤入蛆,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站酷含,受9級特大地震影響鄙早,放射性物質發(fā)生泄漏汪茧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一限番、第九天 我趴在偏房一處隱蔽的房頂上張望舱污。 院中可真熱鬧,春花似錦弥虐、人聲如沸扩灯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珠插。三九已至,卻和暖如春颖对,著一層夾襖步出監(jiān)牢的瞬間丧失,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工惜互, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琳拭。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓训堆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親白嘁。 傳聞我的和親對象是個殘疾皇子坑鱼,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容