iOS客户端启动速度优化

今日头条——iOS客户端启动速度优化

关注度——★★★★

正文——众所周知,一款软件、一个客户端的使用,给人的体验度是非常重要的,只有有好的体验度,才会有口碑,才会有越来越多的人使用,而一个客户端启动速度是非常重要的,这是用户对产品的第一印象。

应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、视频等),也接入了很多第三方的插件,这势必会拖慢应用的启动时间,本着精益求精的态度和对用户体验的追求,我们希望在业务扩张的同时最大程度的优化启动时间。

main()调用之前的加载过程

App开始启动后, 系统首先加载可执行文件(自身App的所有.o文件的集合),然后加载动态链接库dyld,dyld是一个专门用来加载动态链接库的库。 执行从dyld开始,dyld从可执行文件的依赖开始, 递归加载所有的依赖动态链接库。

系统使用动态链接有几点好处:

代码共用:很多程序都动态链接了这些 lib,但它们在内存和磁盘中中只有一份。

易于维护:由于被依赖的 lib 是程序执行时才链接的,所以这些 lib 很容易做更新。

减少可执行文件体积:相比静态链接,动态链接在编译时不需要打进去,所以可执行文件的体积要小很多。

找到拖慢启动应用时长的瓶颈

为了找到瓶颈,我们在启动之后的didFinishLauhcning方法开始执行到首页列表页的NewsListViewController的viewDidAppear方法,几乎每个可能比较耗时的流程进行拆分和统计,得到统计数据之后发现:

主要耗时在首页UI构造和渲染(storyboard加载,tabBar/topBar渲染,开屏广告加载/cell注册/日志模块初始化这几个步骤)。

具体优化点

因此,针对于今日头条这个App我们可以优化的点如下:

1.纯代码方式而不是storyboard加载首页UI。

2.对didFinishLaunching里的函数考虑能否挖掘可以延迟加载或者懒加载,需要与各个业务方pm和rd共同check 对于一些已经下线的业务,删减冗余代码。

对于一些与UI展示无关的业务,如微博认证过期检查、图片最大缓存空间设置等做延迟加载

3.对实现了+load()方法的类进行分析,尽量将load里的代码延后调用。

4.上面统计数据显示展示feed的导航控制器页面(NewsListViewController)比较耗时,对于viewDidLoad以及viewWillAppear方法中尽量去尝试少做,晚做,不做。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2016年国庆假期终于把此书过完,整理笔记和体会于此。 关于书名 书名源于俄罗斯的演员斯坦尼斯拉夫斯基创作的《演员...
    李剑飞的简书阅读 7,281评论 2 65
  • 应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、...
    hgl阅读 447评论 0 0
  • 路上,一阵狂风肆虐,路边的电动车、共享单车的警报声此起彼伏,前方的一群女子慌乱地原地打转,同时传出如男子误...
    0119阅读 115评论 0 2
  • 前两天匆忙回家见到了闺蜜,距离上次见面大概过去了两三个月。其实上大学后我们见面的次数并不多,先是她有男朋友需要见...
    谢小小鸟__阅读 1,053评论 0 0
  • 今天下午葛老师就把成绩单发到了群里,看了之后我非常高兴,因为大宝以115的成绩取得了两个班的第一名,我决定今晚亲自...
    浩菡雨霖阅读 260评论 0 0