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
喜欢的朋友可以扫描关注我的公众号(您的支持是我写作的最大动力)