美文网首页ios专题iOS开发记录iOS学习开发
iOS首页启动优化 - 冷启动,发现了个疑点

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

作者: 终生程序员小松哥 | 来源:发表于2019-01-14 15:21 被阅读28次

    参考美团外卖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首页启动优化 - 冷启动,发现了个疑点

        本文链接:https://www.haomeiwen.com/subject/qawddqtx.html