单文件优化与整个模块优化有什么区别

Yuc*_*ong 4 swift

我注意到项目设置中有两个优化设置:

  • 单文件优化
  • 整个模块优化

在此处输入图片说明

有什么不同?在什么情况下我们应该选择哪一个?

小智 6

单文件优化

这种优化模式使编译器在程序中每个文件运行一个前端实例。它分别对每个文件运行优化,从项目中的其他文件中加载尽可能少的信息。

优点

  • 在进行增量编译时,编译器不必重新编译整个项目,而可以仅重新编译已更改的文件或依赖已更改的文件。
  • 编译器每个文件运行一个实例,因此在具有多个内核的计算机上,它可以更快地编译

缺点

  • 如果要优化的内容跨越多个文件,则将不会执行某些优化
  • 编译器确实必须从其他文件中获取一些信息,因此它可能重复执行此工作的次数超过了必要的次数(如果6个文件引用了另一个文件,则仅需要1个文件就可能对该文件执行了6次工作)。

整体模块优化

此优化模式将为整个模块运行一个前端实例。它一次对所有文件运行优化。

优点

  • 这将执行swift编译器可以执行的最大优化
  • 比单文件优化执行更少的冗余工作

缺点

  • 这只会使用一个CPU内核来对代码运行所有特定于swift的优化。这意味着将无法充分利用多核计算机来编译代码
  • 在增量编译中,您的整个模块每次仍将需要重新编译

使用什么

对于调试版本,我强烈建议完全禁用优化。这将使在调试器中逐步执行代码更加可预测,并缩短构建时间。如果您确实需要优化,则可能应该使用单文件,以获得更好的增量编译时间。

对于发行版,我建议使用全模块优化,因为它可以执行比单文件优化更多的优化。