启动耗时:点击App后到首帧显示耗费的时间。
阶段分析:premain、postmain,也就是main函数执行前和main函数执行后。
耗时检测:Instrument->App Launch
Premain
-
减少动态库数量:启动时程序会加载动态库,这会导致耗时;
-
使用mergeable libraries:动态库增加启动耗时,静态库增加编译耗时,所以使用这个在debug时动态库,release静态库;
-
减少初始化函数:减少+load、
__attribute__((constructor))、等全局变量使用,酌情使用initializer;
-
二进制重排:
减少page fault次数,把启动要调用的函数放前面,可以顺便一起加载。 -
动态库懒加载(不推荐):
-
不方便,不能直接调用类和类的方法,只能动态调用。
-
-
PGO:CLANG_USE_OPTIMIZATION_PROFILE。
-
https://lijianfei.com/post/xcode-pgo-optimization-tool/
-
Postmain
-
酌情推迟SDK初始化等任务;
-
减少耗时方法调用;
-
首帧画面简单点;
-
自定义段初始化函数:把初始化函数放入指定段,首帧加载完毕后,读取指定段的内容再调用。详情参考文章。
耗时方法统计
Instrument
Instrument->App Launch,通过这个启动一个app,勾选好时间范围。
左侧选中Time Profiler,底下Call Tree选中这三个,然后从高到低查看主线程方法耗时。