iOS首页启动优化 - 冷启动,发现了个疑点

1字数 1161阅读 467

参考美团外卖iOS App冷启动治理

对自家影秀城App也做了下启动性能监控。大家可以去搜索下,很多类似文章思路都差不多。

整体思路

pre-main():从按下图标到main函数获得控制权之前的时间。

after-main():main函数获得控制权之后,到看到首页展示。

关于pre-main

这个过程相对我们来讲是黑盒,程序员是触摸不到的,只有明白其原理才能知道优化方案。网上很多自己去看。

性能的测试需要一个测量手段,既然pre-main:

(方法1)编译时打开 DYLD_PRINT_STATISTICS选项,Xcode8,iOS10之后可以看到console打印。

(方法2)美团通过获取进程创建时间点和main()入口点差值来进行测量。这种方法可以获取线上App的测量值。

整个加载过程大概就是程序代码、库、链接、+load..之类的操作;对应优化方案就是减少不必要代码,不必要的库。

关于after-main

这时候正式运行到了我们程序,也方便我们下统计点进行测量和改进。

第一,didFinishLaunchingWithOptions,这个函数中经常会放很多配置选项或启动项。优化方案,找到哪个最影响速度,放到后面去做。

第二,展示的第一张页面:从进入view controller到用户看到页面。优化方案,尽快让用户看到页面;如果从网络加载的东西很多的话,可以分布加载。

针对影秀城App的优化:

在影秀城App里,尝试删除友盟统计、微信分享、微博分享、微信支付、支付宝支付、室内地图导航后,加载速度也就提升了0.1s左右。

didFinishLaunchingWithOptions的耗时本身不大。

首页的展示,要调用4个接口完成;我采用了并行调用接口的方式,可以很快。

对比美团App 和 影秀城App的优化区别:

-- 大厂的App优化集中在didFinishLaunchingWithOptions里干了太多事,但这些都是不同团队开发进入的。如何确定其顺序,以及解决以后再加入的代码,这是个难题。也就是文章里说的如何治理。小公司的App是不存在这个问题的。

-- 大厂为了做到统计启动性能,需要专门的日志。小公司的App就没有这个必要了。

-- 小公司的优化点集中在,移除废代码,以及首页的渲染技巧。

发现了疑点

通过打点发现从main到进入didFinishLaunchingWithOptions的耗时问题。测试了2款机型,结果就更蹊跷了。

iPhone 6,iOS12.1.2 , Xcode10.1 : 从main到进入didFinishLaunchingWithOptions,耗时2s

iPhone 5s,iOS9.3.1,Xcode10.1: 不存在该耗时问题。

搜遍了类似文章,也找了些相关说明,都没有找到答案。要做的事还很多,只能暂时搁置了!

这个疑点知道原因了,看链接

记得避开几个坑:(切记切记)

1,一定要用Release选项进行编译。

2,安装好后就断开和开发电脑的连接。

3,测试的时候,先重启手机,再点开自己的App进行测试。(详情原因请搜索 热启动和冷启动的区别)

手动计时,目测了几款App:淘宝的启动速度很快,依次是微信,微博,美团。当然它们的业务都不同,不能绝对化比较。

总结

性能优化也是一种Bug,也遵循重现问题,定位问题,解决方案的步骤。

1,对于性能问题的重现,难度在于度量,比方如何度量启动速度;

2,定位问题对于性能优化来讲相对简单,也就是甄别出究竟慢在哪里了。

3,解决方案,对于美团外卖这样几百人一起开发的App讲还是有很大困难,如何做好协调工作。

打印冷启动关键参数的样例代码

还可以看下所有性能相关的总结 iOS性能检测全家桶

推荐阅读更多精彩内容