相关疑难解决方法(0)

为什么Swift编译时间这么慢?

我正在使用Xcode 6 Beta 6.

这是一段时间以来一直困扰着我的事情,但现在已经达到了几乎无法使用的程度.

我的项目开始有一个相当大的65个Swift文件和一些桥接的Objective-C文件(这实际上不是问题的原因).

似乎对任何Swift文件的任何轻微修改(比如在应用程序中几乎不使用的类中添加简单的空格)将导致重新编译指定目标的整个Swift文件.

经过深入调查后,我发现占用编译器时间的几乎100%是CompileSwiftXcode在swiftc目标的所有Swift文件上运行命令的阶段.

我做了一些进一步的调查,如果我只使用默认控制器保持app委托,编译速度非常快,但随着我添加越来越多的项目文件,编译时间开始变得非常慢.

现在只有65个源文件,每次编译大约需要8/10秒.根本不是很快.

我还没有看到任何帖子在谈论除了这个问题这一个,但它是一个旧版本的Xcode 6.所以我想知道如果我在这种情况下,唯一的一个.

UPDATE

我在GitHub上检查了一些像Alamofire,EulerCryptoSwift的 Swift项目,但没有一个项目有足够的Swift文件来实际比较.我找到的唯一一个大小合适的项目SwiftHN,即使它只有十几个源文件,我仍然可以验证相同的东西,一个简单的空间和整个项目需要重新编译,这开始采取一个很少的时间(2/3秒).

与Objective-C代码相比,分析器和编译都非常快,这真的感觉Swift永远无法处理大型项目,但请告诉我我错了.

使用Xcode 6 Beta 7进行更新

仍然没有任何进步.这开始变得荒谬了.由于缺乏#importSwift,我真的不知道Apple将如何能够优化它.

更新使用Xcode 6.3和Swift 1.2

Apple已添加增量构建(以及许多其他编译器优化).您必须将代码迁移到Swift 1.2以查看这些优势,但Apple在Xcode 6.3中添加了一个工具来帮助您:

在此输入图像描述

然而

不要像我一样快乐.他们用来制作构建增量的图解算器还没有很好地优化.

实际上,首先,它不会查看函数签名更改,因此如果在一个方法的块中添加空格,则将重新编译依赖于该类的所有文件.

其次,它似乎根据重新编译的文件创建树,即使更改不影响它们.例如,如果将这三个类移动到不同的文件中

class FileA: NSObject {
    var foo:String?
}
class FileB: NSObject {
    var bar:FileA?
}
class FileC: NSObject {
    var baz:FileB?
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你修改FileA,编译器显然会标记 …

compilation swift

201
推荐指数
11
解决办法
4万
查看次数

标签 统计

compilation ×1

swift ×1