我目前正在研究优化我的项目的编译时间。
虽然我知道有一个叫做whole module optimization(简称WMO)的东西,但是我不敢在Build Settings中查看它> 因为我还没有真正深入研究它。
据我了解:
WMO 应该会导致更快的代码执行,但会略微增加编译时间,因为根据此 Swift official blog on whole module optimizations,它将整个模块文件作为一个整体进行编译,而不是分别并行编译每个文件。 .
所以建议设置Swift优化级别如下:
- 对于Debug配置,设置为
None [-Onone]
- 对于 Release 配置,设置为
Fast, Whole Module Optimization [-O -whole-module-optimization]
因为最佳编译时间并不重要偶尔发布版本。
但是,在寻找有关如何减少调试 配置的编译时间的提示时,我发现了这个用户定义 设置:
SWIFT_WHOLE_MODULE_OPTIMIZATION = YES
用于调试SWIFT_WHOLE_MODULE_OPTIMIZATION = NO
发布
此设置将我的调试编译时间几乎减半。
因为我是 Swift 编译器和用户定义设置的新手,所以我试图找到关于 SWIFT_WHOLE_MODULE_OPTIMIZATION
的官方文档,但令人困惑的是那里没有任何在线文档。
人们只是说它减少了编译时间但没有进一步的解释,或者他们与上面提到的 Swift 优化级别冲突。
据我了解,此设置设置为 YES
会增加编译时间,因为它启用了 WMO。因此,我认为我错误地理解了 WMO。
问题:
Swift Optimization Level
设置和SWIFT_WHOLE_MODULE_OPTIMIZATION
之间有什么区别?为什么
SWIFT_WHOLE_MODULE_OPTIMIZATION
减少了编译时间?
谢谢!
最佳答案
- 主要区别是
whole-module-optimization
指的是编译器如何优化模块而Swift Optimization Level
指的是每个文件汇编。您可以阅读有关Swift 优化级别
的不同标志的更多信息 here . SWIFT_WHOLE_MODULE_OPTIMIZATION
缩短了编译时间,因为编译器对所有函数、方法和文件之间的关系有更全面的了解,允许它忽略未使用的函数,优化编译顺序,以及其他改进。它还专注于仅编译修改过的文件,这意味着即使激活了该标志,如果您清理项目并删除派生数据文件夹,您在第一次运行期间仍然会有更长的编译时间。
关于swift - 用户定义的 SWIFT_WHOLE_MODULE_OPTIMIZATION 和 Swift 优化级别之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46705932/