【iOS APP启动分析】启动优化解读

28 篇文章 0 订阅
20 篇文章 1 订阅

在移动端有时会发生启动的性能问题,例如启动闪退、启动卡顿、启动延时等等,这些问题并不好检测,究竟是因为什么原因引起的,还要一一排查,甚是浪费时间。那么,有没有什么能够帮助开发者进行检测分析的工具呢?启动性能的可优化项有哪些?

【第一】App启动过程

iOS应用的启动可分为pre-main阶段和main()阶段,其中系统做的事情依次是:

1. pre-main阶段

加载应用的可执行文件(自身App的所有.o文件的集合);

加载动态链接器dyld(dynamic loader,是一个专门用来加载动态链接库的库);

dyld递归加载应用所有依赖的动态链接库dylib。

2. main()阶段

dyld调用main();

调用UIApplicationMain();

调用applicationWillFinishLaunching;

调用didFinishLaunchingWithOptions。

【第二】启动耗时的测量

在进行优化之前,我们首先应该对启动功能进行性能分析。使用u-apm工具进性能检测,接入友盟U-APM后即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力, 以及卡顿检测、启动分析、内存分析、网络分析等性能监测能力,支持多方面智能告警监测。

u-apm启动分析通过提供详尽的启动耗时、慢启动情况、启动崩溃数据。帮助开发者把控启动状态。图表方式详细的展示了数据情况,不同趋势之间支持交叉查询,帮助开发者数据分析。

【第三】总结我们app需要做的启动性能优化

1. pre-main阶段的优化

顺便先说一下, pre-main阶段优化到什么范围内比较好呢,苹果给出的建议最好是400ms之内,但这个肯定要按照项目的实际情况有所取舍。

1.1、排查无用的dylib(不确定的可以先删除,在编译下项目试试),减少dylib的数目

1.2、检查 framework应当设为optional和required,如果该framework在当前App支持的所有iOS系统版本都存在,那么就设为required,否则就设为optional

1.3、减少ObjC类(项目中不常用的库,废弃的代码等)、方法(selector)、分类(category)的数量、无用的库、非基本类型的C++静态全局变量(通常是类或结构体)

1.4、压缩资源图片,删除无用的图片(IO操作)

1.5、少在类的+load方法里做事情,尽量把这些事情推迟到+initiailize

1.6、使用Swift structs(这是长期工作,可以考虑未来新页面用swift写)

2. main()阶段的优化

2.1、可使用友盟+u-apm先分析启动时哪些地方比较耗时,是否可以做优化

2.2、梳理各个三方库,找到可以延迟加载的库,做延迟加载处理,比如放到首页控制器或tabBar控制器的viewDidAppear方法里,并且保证只执行一次(按项目结构,放在合适的地方)

2.3、梳理业务逻辑,把可以延迟执行的逻辑,做延迟执行处理。比如检查新版本、注册推送通知等逻辑。

2.4、避免复杂/多余的计算

2.5、每次用NSLog方式打印会隐式的创建一个Calendar,因此需要删减启动时各业务方打的log

2.6、避免在用户看到的第一个界面(首页控制器或注册登录页面)的viewDidLoad和viewWillAppear做太多事情,这2个方法执行完,第一个页面才能显示,部分可以延迟创建的视图应做延迟创建/懒加载处理

2.7、首页控制器或注册登录页面用纯代码方式来构建

2.8、我们项目中每次启动会全量拉取AppServerConfig的配置,内容太多,未来需要api配合拆分,等页面使用的时候在拉取相应配置

2.9、持久化数据的读取到内存中的时间也可以评估一下

【第四】总结

综上所述,本篇文章总结了iOS启动流程中有哪些可以优化的项,以及介绍了u-apm这一应用性能检测工具,u-apm云真机测试功能模拟真机排查APP性能隐患,把可能出现的问题扼杀在源头,如果开发者是个追求完美的人,不妨试试这款辅助工具!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值