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
点击查看 2020—课程列表 全网IT各种资源有需求的可以微我,或者你喜欢的课程都可以给我发链接剩下的我来搞定
喜欢的朋友可以扫描关注我的公众号(多多点赞,多多打赏,您的支持是我写作的最大动力)关注有福利可以使用免费梯子自由上网
网友评论