我的项目包括~350个Swift文件和~40个可可pod依赖项.
整个项目迁移到之后Swift 3,构建时间变得非常缓慢,需要花费3到3分钟才能完全编译.
我注意到如果我在不更改任何文件后重建,它会在合理的时间内构建.但是,如果我添加一个新功能,则需要3分钟以上.
Cocoapods似乎没有引起问题,因为它延迟了Compiling Swift source files状态.
我跟着这个调查:
在我的目标的构建设置中添加了-Xfrontend -debug-time-function-bodies标记Other Swift Flags
建立项目
将其复制到终端并运行 pbpaste | egrep '\.[0-9]ms' | sort -t "." -k 1 -n | tail -100
但是,我没有看到任何令人担忧的问题.编译时间最长的文件只有250毫秒.接下来最接近的是100毫秒,即使所有350个文件都需要250毫秒进行编译,这也只有73秒,这与我看到的3分钟以上的版本相差无几.
在更新到Xcode 8和之前,它从未如此缓慢Swift 3.
Ale*_*ing 37
我创建了一个没有运行Swift 3转换的新项目,导入了我的Swift 3文件,但构建时间保持不变.
我已经尝试过了SWIFT_WHOLE_MODULE_OPTIMIZATION = YES,但是只要对多个文件进行更改,增量构建就会失败并触发重建,持续时间超过4-5分钟.
我现在已经从重写我的整个代码库Swift 3来Swift 2.3.它没有任何区别,问题在于Xcode 8编译器.
我可以确认取消选中这两项
将缓解疼痛一段时间,该Xcode 8漏洞似乎与它如何检查文件之间的依赖关系有关.
我已将我的代码库转换Swift 3为Swift 2.3自Xcode 8.2beta测试版所需的代码库,测试版应该包含一个修复程序"当只发生很小的更改时,Xcode不会重建整个目标.(28892475)".不幸的是,他们没有修复错误,我的编译时间完全相同Xcode 8.2 Beta.
我没有足够的声誉来发表评论,但我仍想分享一些资源.几天来我一直陷入这种苦难中,升级到Swift 3完全是一场灾难.
我正在使用它来跟踪慢速文件,尽管就像你一样,这不是我的问题.xcode中的其他内容需要4分钟才能完成:https : //github.com/irskep/swift_compile_times_parser https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode
我也确定我没有任何lazy vars或closures那种迅速不喜欢的东西.不要使用+ operator连接字符串等时
看到这个.
如果我找到任何东西,我会更新这个答案,用Swift 3ATM 来提高效率几乎是不可能的.
San*_*lez 18
我正在使用Xcode 8.1我的问题是使用的Dictionary Nil-Coalescing Operator
这是我的代码,需要10分钟才能构建:
let params: [String:String] = [
"email": email ?? self.email,
"clave": password,
"tipo_documento": documentType?.rawValue ?? self.typeDocument.rawValue,
"documento": number ?? self.documentNumber,
"nombre": name ?? self.name,
"apellidos": lastName ?? self.lastName,
"fecha_nacimiento": birth?.parse() ?? self.birthDate.parse(),
"genero": genre?.rawValue ?? self.genre.rawValue,
"telefono_movil": cel ?? self.cel,
"direccion": address ?? self.address
]
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但它告诉我,字典需要很长时间才能编译.
然后我将其更改为:
var params: [String:String] = [:]
params["email"] = email ?? self.email
params["clave"] = password
params["tipo_documento"] = documentType?.rawValue ?? self.typeDocument.rawValue
params["documento"] = number ?? self.documentNumber
params["nombre"] = name ?? self.name
params["apellidos"] = lastName ?? self.lastName
params["fecha_nacimiento"] = birth?.parse() ?? self.birthDate.parse()
params["genero"] = genre?.rawValue ?? self.genre.rawValue
params["telefono_movil"] = cel ?? self.cel
params["direccion"] = address ?? self.address
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助你们中的一些人.
met*_*tpb 10
SWIFT_WHOLE_MODULE_OPTIMIZATION =是
Xcode版本:8.1 GM
要添加选择目标,请转到Editor > Add Build Setting > Add User-Defined Setting,然后添加上述内容.
我的清洁构建时间从35分钟(Ahem,对不起)下降到8分钟,项目文件数为800.
注意:首先在Xcode 8.0上尝试过这个,但是没有用.
coy*_*yer 10
也string concatenation似乎是不可思议的缓慢Swift3/XCode8:
item.text = item.text + " " + pickerText + " " + (attribute?.Prefix ?? "") + inputText + (attribute?.Suffix ?? "")
Run Code Online (Sandbox Code Playgroud)
〜花了8-10秒编译
item.text = "\(item.text) \(pickerText) \(attribute?.Prefix ?? "")\(inputText)\(attribute?.Suffix ?? "")"
Run Code Online (Sandbox Code Playgroud)
〜花了1.6秒编译
item.text = [item.text, " ", pickerText, " ", (attribute?.Prefix ?? ""), inputText, (attribute?.Suffix ?? "")].joined();
Run Code Online (Sandbox Code Playgroud)
〜花了0,001秒编译
我发现了一些编码风格,需要花费大量时间在Swift中编译(2.3,未在3上测试):
a += b
Run Code Online (Sandbox Code Playgroud)
应该
a = a + b
Run Code Online (Sandbox Code Playgroud)
还将数组添加到一起:
var a = [1,3,4]
var b = [5,6,7,8]
var c = [8,4,3,5]
var d = a + b + c
Run Code Online (Sandbox Code Playgroud)
应该
var a = [1,3,4]
var b = [5,6,7,8]
var c = [8,4,3,5]
var d : [Int] = []
d.appendContentsOf(a)
d.appendContentsOf(b)
d.appendContentsOf(c)
Run Code Online (Sandbox Code Playgroud)
最后一次优化将1个方法的编译时间从9800ms提高到5.5ms ......
| 归档时间: |
|
| 查看次数: |
20777 次 |
| 最近记录: |