swift - 单文件优化与整个模块优化之间有什么区别

标签 swift

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

  • 单文件优化
  • 全模块优化

enter image description here

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

最佳答案

单文件优化

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

优点

  • 在进行增量编译时,编译器不必重新编译您的整个项目,而是可以只重新编译已更改的文件或依赖已更改的文件
  • 编译器为每个文件运行一个实例,因此在多核计算机上,编译速度更快

缺点

  • 如果正在优化的内容跨越多个文件,则不会执行某些优化
  • 编译器确实必须从其他文件中获取一些信息,因此它可能会比必要的次数重复这项工作(如果 6 个文件引用另一个文件,则该文件可能会对其执行 6 次,而实际上只需要 1 次)

全模块优化

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

优点

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

缺点

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

使用什么

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

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

关于swift - 单文件优化与整个模块优化之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998583/

相关文章:

swift - Storyboard布局与屏幕边缘齐平,但在实际 iPhone 7 Plus 中显示出差距

ios - swift 2.0 中 navigationController 中 nib 的 AddSubview(为什么这么难?)

swift 'Cannot invoke with an argument list of type'

swift - NSViewController : use of 'self' in delegating initializer before self. init 的子类被调用错误

SwiftUI 多重绑定(bind)

ios - 根据内容的大小调整文本标签的大小

ios - 如何从使用的 viewController 弹出回到根 ViewController?

swift - 主线程和 Collectionview.reloadData()

ios - 如何在 Unwind segue 中切换选项卡式 View

ios - 使用 swift 从解析中查询对象以显示为标签