目的:
app启动速度提升,有助于提高用户的体验。
成效:
通过检测App启动速度从4s提升到2s。
方案:
主要针对冷启动进行优化
App启动分析
一般情况下,App 的启动分为冷启动和热启动。
- 冷启动是指, App 点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。这是一次完整的启动过程。
- 热启动是指 ,App 在冷启动后用户将 App 退后台,在 App 的进程还在系统里的情况下,用户重新启动进入 App 的过程。
整个启动过程分为:
1、main() 函数执行前
2、main() 函数执行后
3、首屏渲染完成后
main() 函数执行前
- 加载可执行文件
- 加载动态库
- 初始化,+load方法。
- Objc 运行时的初始处理,包括 Objc 相关类的注册、category 注册、selector 唯一性检查等;
对应优化方式:
- 减少动态库加载:项目中会用到第三方库,牵涉到部分系统动态库导入,而随着第三方库的更新,iOS系统的更新,废弃的库需要及时删除。
- 减少启动后不去使用的类和方法,不仅能优化启动速度同时能减少包大小。
- +load方法的内容可以用+initialize方法代替,或者+load方法的内容放在首屏渲染完成后执行。
main() 函数执行后
main() 函数执行后的阶段,指的是从 main() 函数执行开始,到 appDelegate 的 didFinishLaunchingWithOptions 方法里首屏渲染相关方法执行完成。
主要包括:首屏渲染需要做的文件读写,数据读取,大量计算。
屏渲染完成后
这个时候用户能看到首屏界面,这个阶段需要注意的是将会卡住主线程的方法处理掉,不能影响用户交互为主。
app启动时间的监测
Xcode中,Product->Scheme->Edit Scheme->Environment Variables
设置:key:DYLD_PRINT_STATISTICS value:1
可以监测app启动时间
TimeProfiler监测耗时函数
Instruments->TimeProfiler监测耗时函数
1、设置profile为debug模式
2、Build Settings->Build Options->Debug Infomation Format 中设置debug下为DWARF with dSYM File。这样设置就可以看到具体方法名而不是十六进制的地址。
网友评论