iOS启动优化

177 阅读2分钟

启动优化分为三个阶段部分

一: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文件中方法执行顺序进行二进制重排。

结果:重排后缺页数明显减少一半以上。