对自家影秀城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讲还是有很大困难,如何做好协调工作。
网友评论