前言
前段时间,本鑫看了一篇美团的文章:《一款可以让大型iOS工程编译速度提升50%的工具》,一看标题就觉得惊讶,为什么呢?因为它能让编译速度提示50%且不是通过组件二进制化实现
,我们日常的提升编译速度
就是将组件编译成二进制文件导入项目
。本着不清楚的就去了解的原则,就来看看怎么实现的。
探索
编译耗时原因
在项目中我们会引入头文件,例如下图:我们在ViewController中引入了Person的头文件
在我们引入头文件
的时候,引入的是头文件的名称Person
,那么Xcode是怎么找到这个Person文件实际位置的呢?这就要提到项目中配置的header search path
Xcode
在编译
的时候
会读取到header search path的地址
,并且拼接
上我们引入的头文件名
。
也就意味着我们导入的头文件
分成两个部分
:
- 1.
前半部分
:头文件所在的文件目录
- 2.
后半部分
:头文件名称
这也就是为什么我们设置header search path的时候,只需要设置头文件所在目录就可以
了。
问题:因为我们项目里有很多文件
,那么我们就会在header search path设置很多目录
,但是对于找到我们上面引入一个头文件Person
,他需要查找遍历所有
的文件目录
,来找到这个类
。这个过程随着项目的类越来越多
,查找
的时间
就会越来越长
,就会越来越耗时
。比如我们项目组件多达上百个,类有上万个,那么这个过程所产生的的耗时就比较明显了。
解决办法
上面我们知道项目编译耗时的原因,那么怎么解决这个问题呢?美团的文章给出答案,就是使用hmap
hmap
hmap是什么呢?美团文章说了它就是Header Map的实体
,类似于一个Key-Value的形式
,Key值
是头文件
的名称
,Value
是头文件
的实际物理路径
,其实这个东西一直都存在
,只不过我们没注意到罢了。
- 大家想一下,
第一次
运行项目或者编译的时候,会发现很慢
,但是一旦运行
或者编译成功
后,再次编译
或者运行
就会很快
,想过为什么没? - 其实
第一次编译后
,Xcode
就会
帮我们生成一些.hmap文件
,再次编译
时候会直接使用
这些.hmap文件快速找到
对应的头文件
,所以编译速度就会快很多
我们看到
生成
了很多.hmap文件
,Xcode
是按类别生成
的,箭头指
的就是我们主项目工程
的.hmap文件
,如果我们对Xcode进行清理
,那么这些.hmap文件
也会被清掉
,然后我们就会发现,编译又慢
了起来。
通过上面的讲解我们知道.