Swift语法对编译速度的影响
使用Swift初期会惊艳于它强大的表达力,发现原来很啰嗦的逻辑可以用一两句话写完时,工具的强大导致自己会情不自禁的写一些“聪明”的代码。但是Swift毕竟是一个婴儿时期的语言,编译器对于这些极简的代码的处理能力是一个容易被忽略的副作用。
在混编Swift两年后,工程的编译速度到了忍无可忍的程度。通过网上搜寻“如何提高Xcode编译速度”把能做的优化都做了之后,还是没有得到根本的提升。直到发现了这篇文章Regarding Swift build time optimizations,它采用了一个开源工具来检测每一个Swift方法的编译时间,从而定位耗时。我通过对耗时语法的修改,成功的把一个超过4年多庞大工程的编译速度缩短了30%。
下面介绍一下这次优化中遇到的有坑的语法:
1. 避免在Array/Dictionary literals里使用复杂运算,如??
(Nil Coalescing Operator), 随元素个数耗时成指数式增长
??
(Nil Coalescing Operator), 随元素个数耗时成指数式增长解决方案: 用传统的键值对赋值
2. 浮点数参与的数学函数后追加算数运算, 耗时增长幅度匪夷所思
解决方案: 数学函数独立运算,用结果做算数运算
3. 避免在有??的情况下使用 + 来拼接字符串
解决方案: 采用\()
(String Interpolation)
另外介绍一个hack的设置
在User-Defined里添加SWIFT_WHOLE_MODULE_OPTIMIZATION = YES
可以在debug选择Onone的前提下享受到优化
Last updated