单文件优化
此优化模式使编译器在程序中为每个文件运行一个前端实例。它分别对每个文件运行优化,从项目中的其他文件加载尽可能少的信息。
<强>赞成强>
- 进行增量编译时,编译器不必重新编译整个项目,而只需重新编译已更改的文件或依赖已更改的文件
- 编译器为每个文件运行一个实例,因此在具有多个内核的计算机上,它可以更快地编译
<强>缺点强>
- 如果正在优化的内容跨越多个文件,则不会执行某些优化
- 编译器必须从其他文件中获取一些信息,这样它可能会重复这项工作的次数超过必要的时间(如果6个文件引用另一个文件,那么当只需要1个文件时,该文件可能会执行一些工作6次)
整个模块优化
此优化模式将为整个模块运行一个前端实例。它一次对所有文件进行优化。
<强>赞成强>
- 这将执行swift编译器可以执行的最大优化
- 执行比单文件优化更少的冗余工作
<强>缺点强>
- 这将只使用一个CPU内核来运行代码上所有特定于swift的优化。这意味着将无法充分利用多核计算机来编译代码
- 在渐进式编译中,每次都需要重新编译整个模块
使用什么
对于调试版本,我强烈建议完全禁用优化。这将使调试器中的代码更加可预测,并使构建时间更短。如果你真的需要优化,那么你应该使用单文件来获得更好的增量编译时间。
对于发布版本,我建议使用整体模块优化,因为它可以执行比单文件优化更多的优化。