返回

快速优化 Swift 编译时间,折半提速

见解分享

在 Swift 开发项目的过程中,随着代码量的不断增加,每次调试的编译速度也逐渐下降。在 debug 模式下编译项目竟然需要超过 6 分钟。因此,研究如何缩短编译时间变得尤为重要。

优化策略

在 Swift 中,有两种主要策略可以优化编译时间:

  • SWIFT_WHOLE_MODULE_OPTIMIZATION :此标志允许编译器一次性编译整个模块,而不是逐个文件编译。这可以显著减少编译时间,尤其是在模块间存在大量依赖关系的情况下。
  • Optimization Level :此标志控制编译器生成的代码的优化级别。较高的优化级别可以产生更快的代码,但编译时间也会更长。

SWIFT_WHOLE_MODULE_OPTIMIZATION

SWIFT_WHOLE_MODULE_OPTIMIZATION 标志可以显着缩短编译时间。它通过允许编译器一次性编译整个模块,而不是逐个文件编译,来实现这一点。这消除了在编译每个文件时反复加载模块依赖关系的需要,从而节省了大量时间。

要启用 SWIFT_WHOLE_MODULE_OPTIMIZATION,请在项目的 Build Settings 中将其设置为 YES。

Optimization Level

Optimization Level 标志控制编译器生成的代码的优化级别。较高的优化级别可以产生更快的代码,但编译时间也会更长。

对于调试版本,建议使用较低的优化级别(例如 -O),以减少编译时间并便于调试。对于发布版本,建议使用较高的优化级别(例如 -O3),以提高代码性能。

在项目的 Build Settings 中设置 Optimization Level。

其他提示

除了上述两个主要策略外,还有其他一些提示可以帮助优化 Swift 编译时间:

  • 避免使用循环依赖 :循环依赖会导致编译器反复编译模块,从而延长编译时间。
  • 使用并行编译 :Xcode 11 及更高版本支持并行编译,它可以在多个内核上同时编译模块,从而缩短编译时间。
  • 使用缓存的派生数据 :派生数据包含编译过程中生成的文件。使用缓存的派生数据可以避免在每次编译时重新生成这些文件,从而节省时间。

结论

通过应用这些优化策略,可以显著减少 Swift 项目的编译时间。SWIFT_WHOLE_MODULE_OPTIMIZATION 和 Optimization Level 标志是最有效的策略,其他提示也有助于进一步改进编译时间。通过优化编译时间,可以提高开发效率并加快项目交付速度。