- APP启动时间(t)分为两部分,一部分为main 函数启动之前的时间(t1),另一部分为main函数启动之后的时间(t2)。
- t1:系统dylib动态链接库和自身APP可执行文件的加载;
- main方法执行后到AppDelegate中的- (BOOL)Application: (UIApplication *)Application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 方法执行结束前的时间,主要是构建并展示首个界面。
- t2的时间是可以同过异步绘制,延迟加载等方式减少didFinishLaunchingWithOptions 中的时间消耗进行优化,但是t1的时间如何优化呢?其实xcode已经为我们准备好了,真机调试时候勾选
DYLD_PRINT_STATISTICS
选项,会打印main 函数之前时间占用。 环境变量配置
如下是一个空项目dyld 耗时,根据耗时可以针对性进行优化。
Total pre-main time: 153.53 milliseconds (100.0%)
dylib loading time: 46.41 milliseconds (30.2%)
rebase/binding time: 126687488.9 seconds (418075601.5%)
ObjC setup time: 15.32 milliseconds (9.9%)
initializer time: 125.28 milliseconds (81.6%)
slowest intializers :
libSystem.B.dylib : 10.40 milliseconds (6.7%)
libBacktraceRecording.dylib : 5.40 milliseconds (3.5%)
libMainThreadChecker.dylib : 103.50 milliseconds (67.4%)
除了DYLD_PRINT_STATISTICS 还提供了其他环境变量 如下:
变量 | 值 | 说明 |
---|---|---|
DYLD_PRINT_STATISTICS | 1 | Print launch performance statistics 打印启动时间等参数 |
DYLD_PRINT_SEGMENTS | 1 | Log segment mapping |
DYLD_PRINT_INITIALIZERS | 1 | Log image initialization calls |
DYLD_PRINT_BINDINGS | 1 | Log symbol bindings |
DYLD_PRINT_APIS | 1 | Log dyld API calls (for example, dlopen) |
DYLD_PRINT_ENV | 1 | Print launch-time environment variables |
DYLD_PRINT_OPTS | 1 | Print launch-time command line arguments |
DYLD_PRINT_LIBRARIES_POST_LAUNCH | 1 | Log library loads , but only after main has run |
DYLD_PRINT_LIBRARIES | 1 | Log library loads |
DYLD_IMAGE_SUFFIX | 1 | Search for libraries with this suffix first |
网友评论