优化编译时间

570 阅读2分钟

针对编译选项的优化

常见的几种优化方式有下面几种

  • 设置Build active architecture only 为 YES

      设置为NO时会编译全架构,设置为YES时只编译支持的架构。该处也可以在xcodebuild时通过参数-arch配置对应架构来实现。

  • 将Debug Information Format设置为DWARF

      设置Debug下不生成dSYM,只在release下生成

  • Build Setting -> Header Search Paths->non-recursive

  • 关闭 Enable Index-While-Building Functionality

  • 增加编译时使用的线程数

      default write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 8

  • 使用虚拟内存提升读写速度

      可以在通过产生虚拟缓存并与xcode的缓存文件夹进行链接实现

      该方法存在的问题为每次重启后就会导致虚拟内存消失,如果服务器不常关机的话影响并不大,可以在系统登录项中增加脚本,具体可参考文章: www.jianshu.com/p/11481ae0e…

**

统计编译时间

如果想统计编译耗时,目前采取了四种方式进行统计。

  • 在编译过程中通过time指令输出xcodebuild的耗时

例如:

         time xcodebuild –configuration configurationworkspaceconfiguration –workspace workspace –scheme $scheme –destination genertic/platform=ios

通过time命令能够统计

         Real:从进程开始执行到完成所耗费的CPU总时间

         User:执行用户态代码所耗费的CPU时间,不包括其他进程使用时间以及本进程阻塞时间

         Sys:执行内核系统调用所耗费的CPU时间

time命令更多详细信息可使用man time查看或参考文章:

c.biancheng.net/linux/time.…

 

  • 通过xcode自带log进行分析

在xcode编译的过程中点击log能够看到编译的各个步骤以及Compiling每个文件的耗时,也能够在编译缓存中的Logs目录下看到xcactivitylog类型的日志,可以用xcpretty对其进行格式化,但是缺点是格式化后的日志将不带有耗时

  • 通过ts/gonmon工具分析

ts/gonmon的原理是监控终端的输出并统计两个输出之间的时间间隔,能够借助xcpretty实现统计编译各个文件耗时的目的。

ts命令使用:

xcodebuild –configuration configurationworkspaceconfiguration –workspace workspace –scheme $scheme –destination genertic/platform=ios | xcpretty | ts –I %.s | grep Compiling >>Time.txt

 

gnomon命令使用:

xcodebuild –configuration configurationworkspaceconfiguration –workspace workspace –scheme $scheme –destination genertic/platform=ios | xcpretty | gnomon -i | grep Compiling >>Time.txt

在生成Time.txt之后通过sort命令排序就可以获取编译耗时较高的文件 

  • 通过clang增加参数-ftime-report与-ftime-trace,借助ClangBuildAnalyzer进行分析

在build setting中的other C flags与other C++ flags中添加-ftime-trace或-ftime-report能够得到每个文件编译的耗时,其中-ftime-report为一维数据,而-ftime-trace能够得到json数据,通过chrome://tracing进行解析

json文件将与.o文件一同存储于Xcode的缓存文件夹下,由于每个文件都会生成对应的json,不好处理,就需要借助ClangBuildAnalyzer进行分析