APP启动流程学习(一)

浏览了一下别人大牛的博客,做个总结和实践。

检测app启动时间的方法:

新增变量DYLD_PRINT_STATISTICS,值设为YES。

想要更详细的启动信息可以设置DYLD_PRINT_STATISTICS_DETAILS,值设为YES

然后command+R直接运行就可以在控制台看到详细的信息了。

这里我随便找了个demo运行,为了让效果更明显加了很多的第三方库。

运行完看到控制台的信息:

QAQ因为加了很多第三方库,所以一共762毫米,第一步就用了603毫秒,非常的大,然后我去别人博客下面了解了每个步骤的含义。

1. dylib loading 动态库加载

2.rebase/binding:就是对动态库的链接和绑定,因为动态库加载完成后,他们每一个都是独立的,要把她们串起来,所以第一步的时间跟第二步的时间是成正比的

rebase将镜像读入内存,修正镜像内部的指针,性能消耗主要在IO

bind是查询符号表,设置指向镜像外部的指针,性能消耗主要在CPU计算。

 3.objc setup:主要就是维护一张关于全部类的一些属性和方法,类名等等东西的一张表。

主要工作一:读取文件中的所有类,注册到当中,二:读取所有分类,将分类加载到类对象当中。

4.initialize time:这一份指代的是执行+initialize方法的时间。如果你执行了+load方法(不建议),尽量使用+initialize代替。

所以优化根据每个步骤都有一个优化方向:

1.减少动态库

2.少写点类,或者把不用的类移除掉。

3.使用懒加载

检测项目中没用的类的工具:https://github.com/hsfgithub/xcodeprojectarrangementtool

下载下来直接xcode运行即可,使用简单

区分一个库是动态库还是静态库的方法:

静态库结尾:lib,framework

动态库:dll,framework

因为framwork结尾的文件可以是动态库,也可以是静态库所以看文件后缀不太好。

所以可以直接使用xcode里面的工具

搜索mach,可以发现alamofire是动态库。

 

实践

删除一些动态库,重新运行

可以看到时间还是减少的挺多的。

因为这是一个小demo,主要的耗时还是在动态库,我切换一个大一点的项目看看时间构成。

 

 额,好像也差不多,动态库雀氏是妨碍启动的大头。

参考文章:iOS App启动优化(一):检测启动时间 - 掘金

iOS-App启动为什么缓慢 - 简书

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值