博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift语法对编译速度的影响
阅读量:7236 次
发布时间:2019-06-29

本文共 1428 字,大约阅读时间需要 4 分钟。

使用Swift初期会惊艳于它强大的表达力,发现原来很啰嗦的逻辑可以用一两句话写完时,工具的强大导致自己会情不自禁的写一些“聪明”的代码。但是Swift毕竟是一个婴儿时期的语言,编译器对于这些极简的代码的处理能力是一个容易被忽略的副作用。

在混编Swift两年后,工程的编译速度到了忍无可忍的程度。通过网上搜寻“如何提高Xcode编译速度”把能做的优化都做了之后,还是没有得到根本的提升。直到发现了这篇文章,它采用了一个来检测每一个Swift方法的编译时间,从而定位耗时。我通过对耗时语法的修改,成功的把一个超过4年多庞大工程的编译速度缩短了30%。

下面介绍一下这次优化中遇到的有坑的语法:

1. 避免在Array/Dictionary literals里使用复杂运算,如 ?? (Nil Coalescing Operator), 随元素个数耗时成指数式增长
var a: String?var b: String?var c: String?var d: String?var e: String?var f: String?var g: String?let _ = [    "a": a ?? "", // 1 ms    "b": b ?? "", // 3 ms    "c": c ?? "", // 11 ms    "d": d ?? "", // 48 ms    "e": e ?? "", // 274 ms    "f": f ?? "", // 1339 ms    "g": g ?? "", // 6550 ms]复制代码

解决方案:用传统的键值对赋值

var dict = [String: String]()dict["a"] = a ?? "" // 30 msdict["b"] = b ?? "" // 27 msdict["c"] = c ?? "" // 25 msdict["d"] = d ?? "" // 27 msdict["e"] = e ?? "" // 26 msdict["f"] = f ?? "" // 26 msdict["g"] = g ?? "" // 28 ms复制代码
2. 浮点数参与的数学函数后追加算数运算, 耗时增长幅度匪夷所思
min(1, 2.0)    + 1 // 10 ms    + 2 // 35 ms    + 3 // 352 ms    + 4 // 6092 ms复制代码

解决方案:数学函数独立运算,用结果做算数运算

let a = min(1, 2.0)a + 1 + 2 + 3 + 4 // 11 ms复制代码
3. 避免在有??的情况下使用 + 来拼接字符串
var a: String?let _ = (a ?? "")    + "1" // 27 ms    + "2" // 101 ms    + "3" // 1043 ms    + "4" // 编译超时复制代码

解决方案:采用 \() (String Interpolation)

let _ = "\(a ?? "")1234" // 73 ms复制代码
另外介绍一个hack的设置

在User-Defined里添加SWIFT_WHOLE_MODULE_OPTIMIZATION = YES 可以在debug选择Onone的前提下

欢迎关注我的公众号SlowCoding

转载地址:http://jpgfm.baihongyu.com/

你可能感兴趣的文章
《VMware Virtual SAN权威指南(原书第2版)》一1.6 从管理员角度来看VSAN的样子...
查看>>
全球区块链商业理事会中国中心成立,推动全球区块链共识教育
查看>>
话说数据中心里的软件定义
查看>>
语音识别谁最强?微软宣称错误率全球最低
查看>>
IT必读:OA中如何制作转正申请单
查看>>
从和颐酒店事件来看地方安防标准的作用
查看>>
特朗普要筑“墙”硅谷外籍精英看重墙上的“门”
查看>>
美国黑客迷上"黑"医院 信息安全如何保障?
查看>>
拯救脆弱的智慧城市:不但要“智商” 还得有“生气”
查看>>
SoftBank和 Actility结盟 加速日本物联网发展
查看>>
印度麦当劳应用麦乐送泄露220多万用户数据
查看>>
光伏6.30抢装并网规模近15GW 光伏产品均价仍有上涨空间
查看>>
去IOE的又一利器,PingCAP打算创造一款更适合云计算的分布式数据库
查看>>
升级版CRM规则发布 四大变化完善信用风险管理机制
查看>>
新常态下光伏等电力工业的发展预测
查看>>
服务器重启时又具有哪些危害了
查看>>
安防监控系统组成部分介绍
查看>>
AT&T在宣传语中对用户说“谢谢” 花旗银行不干了
查看>>
中国个人信息安全和隐私保护报告:两成人曾受电信诈骗恐吓
查看>>
SimpliVity公司高管谈IT“难以忍受的复杂性”
查看>>