启动优化分为三个阶段部分
一:main函数之前
利用 DYLD_PRINT_STATISTICS 添加工程环境变量重新运行可查看
dylib:动态库加载时间,官方的建议是6个。多了会影响启动时间
rebase/binding:偏移修正时间(iOS安全机制会把内存地址加上一个随机十六进制数来进行地址修正)/方法、函数、二进制文件与动态库绑定时间。因此方法函数不要过多,但这也是不可避免的问题
二:main函数之后
1.把不用的类或方法尽量干掉,这些不用的类或方法即使不用也会参与到编译的过程增加耗时,有人专门做过统计,大致增加两万个类的时候会增加800毫秒的启动耗时
2.启动的时候如果有需要加载的东西尽量的使用多线程去做,这样可以尽可能的把CPU的性能发挥出来
3.启动的时候需要展示出来的页面尽量不要使用xib或故事版,因为他们需要做一次代码的解析与渲染会增加耗时,例如首页,启动页等等
三:二进制重排(把所有启动需要调用的方法排列在一起这就是二进制重排)
Clang插桩
利用lldb链接器按照otherFile的执行顺序来进行二进制重排的一个过程
获取otherFile文件步骤
步骤一:
在工程Build Settings中配置
Other Swift Flags选项中:-sanitize-coverage=func 和 -sanitize=undefined 用于兼容swift
Other C Flags选项中:-fsanitize-coverage=func,trace-pc-guard 用于兼容OC
步骤二:利用编译器生成orderFile文件,放入根目录配置order File 为根目录orderFile路径,配置Write link Map File 为YES。 此时杀掉进程,APP则会根据orderFile文件中方法执行顺序进行二进制重排。
结果:重排后缺页数明显减少一半以上。