APP的啟動可以分為2種:
- 冷啟動(Cold Launch):從零開始啟動APP
- 熱啟動 (Warm Launch):APP已經在記憶體中,在背景存活着,再次點選圖示啟動APP
APP啟動時間的優化
那我們通常所說的啟動時間優化都是再說的冷啟動的時間優化,其實Xcode是提供給我們一種分析啟動時間的方式,我們接下來試一試
- 通過添加環境變量可以列印出APP的啟動時間分析(
)Edit Scheme -> Run -> Arguments
-
設定為DYLD_PRINT_STATISTICS
1
Total pre-main time: 238.11 milliseconds (100.0%) dylib loading time: 173.78 milliseconds (72.9%) rebase/binding time: 126687488.9 seconds (15889931.7%) ObjC setup time: 15.16 milliseconds (6.3%) initializer time: 62.59 milliseconds (26.2%) slowest intializers : libSystem.B.dylib : 6.66 milliseconds (2.7%) libBacktraceRecording.dylib : 7.30 milliseconds (3.0%) libMainThreadChecker.dylib : 40.12 milliseconds (16.8%)
- 如果需要更詳細的資訊,那就将
設定為DYLD_PRINT_STATISTICS_DETAILS
1
total time: 981.15 milliseconds (100.0%) total images loaded: 334 (327 from dyld shared cache) total segments mapped: 21, into 370 pages total images loading time: 664.10 milliseconds (67.6%) total load time in ObjC: 20.03 milliseconds (2.0%) total debugger pause time: 402.89 milliseconds (41.0%) total dtrace DOF registration time: 0.22 milliseconds (0.0%) total rebase fixups: 17,951 total rebase fixups time: 2.27 milliseconds (0.2%) total binding fixups: 460,826 total binding fixups time: 229.13 milliseconds (23.3%) total weak binding fixups time: 0.03 milliseconds (0.0%) total redo shared cached bindings time: 254.48 milliseconds (25.9%) total bindings lazily fixed up: 0 of 0 total time in initializers and ObjC +load: 65.34 milliseconds (6.6%) libSystem.B.dylib : 9.14 milliseconds (0.9%) libBacktraceRecording.dylib : 7.73 milliseconds (0.7%) libobjc.A.dylib : 1.55 milliseconds (0.1%) CoreFoundation : 2.24 milliseconds (0.2%) libMainThreadChecker.dylib : 38.86 milliseconds (3.9%) libLLVMContainer.dylib : 2.13 milliseconds (0.2%)
-
total symbol trie searches: 1116978
total symbol table binary searches: 0
total images defining weak symbols: 37
total images using weak symbols: 92
```
這些資料可能對大家來說不太直覺,這其實隻是提供給大家一個參考,一般我個人認為total time在
400~500ms之間就相對來說是比較正常的,如果時間太長就可能要進行相應的優化了,接下來我們來看看冷啟動的大概分哪幾個階段
APP冷啟動階段可以概括為3大階段
- dyld
- runtime
- main
One More Thing
喜歡的朋友可以掃描關注我的公衆号(您的支援是我寫作的最大動力)