APP启动时间应从哪些方面优化?

282 阅读2分钟

App总启动时间 = main()之前的加载时间 + main()之后的加载时间

main()之前的加载时间

主要是 系统dylib(动态链接库)和自身App可执行文件的加载;
1、减少动态库的引用,将项目中不使用的Framework及时删除,
2、合并动态库。
3、尽量不使用内嵌(embedded)的dylib,加载内嵌dylib性能开销较大。
4、清理项目中冗余的类、category。对于同一个类有多个category的,建议进行合并。
5、将不必须在+load方法中做的事情延迟到+initialize中。
6、尽量不要用C++虚函数(创建虚函数表有开销),不要在C++构造函数中做大量耗时操作。

 main()之后的加载时间

 main方法执行之后到AppDelegate类中的- didFinishLaunchingWithOptions:方法执行结束前这段时间,主要是构建第一个界面,并完成渲染展示
1、将一些不影响首页展示的服务放到其他线程中去处理,或者延时处理和懒加载。延时处理可以监听Runloop的状态,当进入kCFRunLoopBeforeWaiting(即将休眠状态)再去处理任务,最大限度的利用CPU等系统资源。
2、使用Xcode的Instruments的Time Profiler(pro fai了)工具,分析启动过程中比较耗时的方法和操作,然后,进行具体的优化。
3、重点关注TabBarController和首页的性能,保证尽快的能展示出来。这两个控制器及里边的view尽量用代码进行布局,不使用storyboard和xib,如果在布局上想更进一步的优化,那就连autolayout(Massonry)都不要使用,直接使用frame进行布局。
4、本地缓存。首页的数据离线化,优先展示本地缓存数据,等待网络数据返回之后更新缓存并展示。