iOS 性能优化方案-启动优化
1、冷启动(从零开始的启动)
冷启动三个阶段
1.1 Main函数执行前
- 加载可执行文件(mach-o文件)
- 加载动态链接库,进行rebase指针调整和bind符号绑定
- Objc运行时的初始化处理,包括Objc相关类的注册、category注册、selector唯一性检查
- 初始化,包括执行了 load()方法、attribute((constructor))修饰的函数调用、创建C 静态全局变量
优化方案
- 减少动态库加载。每个库本身都有依赖关系,苹果公司建议使用更少的动态库,并且建议在使用动态库的数量较多时,尽量将多个动态库进行合并。数量上,苹果公司建议最多使用 6 个非系统动态库。
使用到的动态库有AMap高德地图、Charts图表、UMSocial友盟
删除未使用到的iflyMSC科大讯飞语音
- 减少加载启动后不会去使用的类或者方法
1.整理AppDelegate.m中逻辑,删除不使用的类和方法,减少启动编译时间
2.取消打印废日志NSSLog
- load() 方法里的内容可以放到首屏渲染完成后再执行,或使用 initialize() 方法替换掉。 因为,在一个 load() 方法里,进行运行时方法替换操作会带来 4 毫秒的消耗。不要小看这 4 毫秒,积少成多,执行 load() 方法对启动速度的影响会越来越大
- 控制 C 全局变量的数量
删除不使用的宏定义等全局变量
1.2 Main函数执行后
主要是指main()函数执行开始,到Appdelegate的didFinishLaunchingWithOptions方法里首屏渲染相关方法的执行
- 首屏初始化所需要配置文件的读写操作
- 首屏列表大数据的读取
- 首屏渲染的大量计算
优化方案
从功能上梳理出哪些是首屏渲染必要的初始化功能,哪些是 App 启动必要的初始化功能,而哪些是只需要在对应功能开始使用时才需要初始化的。梳理完之后,将这些初始化功能分别放到合适的阶段进行
APP启动必要的初始化功能:
友盟平台设置、高德地图设置、注册系统推送、自定义启动动画LaunchAnimation、检测版本更新、向服务器请求功能权限
对应功能开始使用时才需要初始化功能:
内部引导页Guidance、登录状态CheckLogin、实时会议弹窗定时任务、实时位置上传定时任务、Socket消息长连接、向服务器注册推送、本地通知
1.3 首屏渲染完成
从渲染完成时开始,到 didFinishLaunchingWithOptions 方法作用域结束时结束
优化方案
- 功能级优化
main() 函数开始执行后到首屏渲染完成前只处理首屏相关的业务,其他非首屏业务的初始化、监听注册、配置文件读取等都放到首屏渲染完成后去做 - 方法级优化
检查首屏渲染完成前主线程上有哪些耗时方法,将没必要的耗时方法滞后或者异步执行。通常情况下,耗时较长的方法主要发生在计算大量数据的情况下,具体的表现就是加载、编辑、存储图片和文件等资源
登录动画执行时,异步执行向苹果服务器请求版本内容结果,并自动登录
2、热启动
- App在内存中,在后台存活着,再次点击图标进入App
3、APP启动的监控手段
- 定时抓取主线程上的方法调用堆栈,计算一段时间里各个方法的耗时
- 对 objc_msgSend 方法进行 hook 来掌握所有方法的执行耗时
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggggga
系列文章
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13