编译优化hmap

编译优化hmap

[toc]

一、查看编译时间

Clean后,执行Command+B,查看编译时间为24.0seconds

image-20211124154515792

而如果编译后,不Clean,继续执行编译,即使用之前的编译缓存,得到的新的编译时间为0.6seconds

image-20211124154752653

二、hmap优化的结果

系统的Pods中Headers里有Public和Private目录:

image-20211124155017822

使用 plugin ‘cocoapods-hmap-prebuilt’ 后

image-20211124155617317

在Pods中Headers里会多出一个HMap目录,里面的文件为hamp,如下截图所示:

image-20211124155527016

此时,我们重新Clean,然后编译,得到的优化后的编译时间为16.8seconds

image-20211124155414548

如果编译后,不Clean,继续执行编译,得到的时间为0.5seconds,也比之前的0.6seconds短

image-20211124155945171

三、hmap优化怎么使用

我们直接使用 cocoapods-hmap-prebuilt

1、cocoapods-hmap-prebuilt的使用方法

直接在你的Podfile中,添加以下一行代码就行

1
2
3
4
5
6
# this is part of Podfile
target 'XXX' do
plugin 'cocoapods-hmap-prebuilt' # 添加此行代码就行
pod 'XXX'
...
end

之后,你和平时一样执行pod install就行。

2、安装cocoapods-hmap-prebuilt

如果你没安装cocoapods-hmap-prebuilt,则会在执行pod install的时候,发生如下错误:

image-20211124161907639

所以请先安装,安装方法如下:

1
gem install cocoapods-hmap-prebuilt

image-20211124162055386

之后,你和平时一样执行pod install就行,执行过程中,会多出如下输出:

image-20211124165627186

三、coapods-hmap-prebuilt介绍

以下内容摘自:一款可以让大型iOS工程编译速度提升50%的工具

cocoapods-hmap-prebuilt 是美团平台迭代组自研的一款 cocoapods 插件,以 Header Map 技术 为基础,进一步提升代码的编译速度,完善头文件的搜索机制。

四、Header Map 是个啥?

Header Map是二进制文件,其包含头文件和头文件路径的映射表。

其核心功能是让编译器能够找到相应的头文件的位置,相较于使用header search path提供的路径查找会快很多

1、Hmap在编译后的文件路径

我们编译后,通过Products,找到生成的app的目录,如下图:

image-20211124165159982

在其中,我们找到Intermediates.noindex目录下的Pod.build

image-20211124165909673

2、hmap查看工具

我们通过hmap查看工具来输出下hmap文件的内容。

1
hmap print Masonry-all-target-headers.hmap

输出内容如下:

image-20211124170212021

附:该hmap工具的安装方法,如其github上的How to use一样,使用如下一行命令,在终端中执行即可。

1
brew install milend/taps/hmap

五、Xcode 编译的其他相关知识

Xcode 编译相关

End