Swift项目编译运行慢-解决方案

2,507 阅读2分钟

前言

Swift作为一个新兴的语言,慢慢的走到了3.0,现在越来越多的工程师尝试在项目中使用Swift进行开发。在我们新的的项目中就使用纯Swift开发,Swift的有点不用赘述,说说他的缺点,过慢的编译时间真的是万马奔腾极大的影响了我们的开发效率,发现有点自己很羡慕前段啦。 言归正传,开始不会觉得编译慢,随着开发的进入你会逐渐发现,完整的编译一次可能需要15到20分钟,完全不能忍。

代码优化

有图有真相,让我们具体看看差距是有多大 修改之前一个函数跑了150000ms、70000ms,编译不慢才怪! 修改之后变成了几十ms,简直是500斤变成了50斤有木有!

image.png

image.png

但是这部分我到底做了什么呢?

1.指定类型

    var array1 = [[[String: String]]]()
    var tipList1 = ["", "默认值,可编辑,主要在门店配置支付中进行选择", "", ""]
    var array2 = [[[String: String]]]()
    var tipList2 = ["默认值,可编辑,该信息会显示在微信、支付宝等第三方,支付成功后的页面中,请确保名称统一",
                    "",
                    "请填写营业执照注册号或统一社会信用代码。不包含括号及括号内的内容",
                    ""]
    
    var array3 = [[[String: String]]]()
    var array3_m = [[[String: String]]]()
    var array3_s = [[[String: String]]]()
    var tipList3 = [""]
    var array4 = [[[String: String]]]()

这就是时间最长的那段,起初我并没有指定类类型或是创建他们,等到使用的时候再去创建和处理数据 所以处理数据时,尽量避免类型推断,能确定类型的一定要给出具体类型

2.nil类型问题

由于swift存在可选值,因此某些对象的值可能为空,这在代码处理时可能会导致编译很慢,所以尽量不要书写,结构过于复杂或过长的代码,编译起来都很耗时

// 这样是比较耗时的
string = str1 == nil ? "" : str1 + str2 ?? "" + str3 ?? ""
let string1 = str1 ?? ""
let string2 = str2 ?? ""
let string3 = str3 ?? ""
string = string1 + string2 + string3

3.少用+、+=运算符

//1400.0ms 
func addArray() {
    let arr1 = [1,2,3]
    let arr2 = [3,4,5]
    result += arr1 + arr2 + [10]
}
//8.0ms 
func arrPlusOperatos() {
    let arr1 = [1,2,3]
    let arr2 = [3,4,5]
    result.appendContentsOf(arr1)
    result.appendContentsOf(arr2)
}

4.其他耗时操作

1.懒加载也会增加耗时 2.复杂的集合和操作

总结:

类型推断是耗时最大因素,建议大家使用是指定类型 最后给大家附上我使用的检测工具BuildTimeAnalyzer-for-Xcode 首先,在项目中添加下图内容

image.png

运行BuildTimeAnalyzer

image.png

最后

image.png