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

问题描述 投票:1回答:1

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

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

enter image description here

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

swift
1个回答
4
投票

单文件优化

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

优点

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

缺点

  • 如果正在优化的内容跨越多个文件,则不会执行某些优化
  • 编译器必须从其他文件中获取一些信息,这样它可能会重复这项工作的次数超过必要的时间(如果6个文件引用另一个文件,那么当只需要1个文件时,该文件可能会执行6次工作)

整体模块优化

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

优点

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

缺点

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

使用方法

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

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

© www.soinside.com 2019 - 2024. All rights reserved.