23.Swift项目编译速度优化
前言
本文将从代码层面探究如何分析并优化 Swift
代码的编译速度。
一、 检查代码中的编译瓶颈
1.1 项目配置
通过警告的形式标识出超出设定值的代码,下面以设置 100ms
为界限为例
在 BuildSettings
中 other swift flags
下添加下面的配置:
-Xfrontend -warn-long-function-bodies=100
-Xfrontend -warn-long-expression-type-checking=100
仅在
DEBUG
下添加就行了,毕竟只是用来检测
1.2 编译检查
Clean
后编译一次,这里就可以看到很多的警告了:
你可能觉得这样检测有点不方便,毕竟项目的警告可能有几百上千个。下面介绍一个工具:BuildTimeAnalyzer-for-Xcode
二、 BuildTimeAnalyzer-for-Xcode 使用说明
首先 Clone 项目代码(或者直接下载代码)
2.1 项目配置
在 BuildSettings
中 other swift flags
下添加下面的配置:
-Xfrontend -debug-time-function-bodies
然后 Clean
项目,重新 Build
。
2.2 打开 BuildTimeAnalyzer.xcodeproj
这里有三种方式来使用
a. 直接运行
b. 导出App
Product - Archive
导出一个App文件,以后即可直接使用了。
c. 懒人方式-下载即用
这里我搞好了一个包,直接可用。支持 Intel
, Apple Silicon
。
2.3 查看编译耗时日志
在列表中点击刚才自己的配置完成并编译后的项目,即可查看日志。
显示了整体编译耗时,还标有具体代码的行数与函数名,点击可跳转。
每次时间不一定一样,根据电脑运行情况会有一些变化,但是整体的瓶颈趋势还是基本一致的
三、 优化项目
这里个人建议结合上面两种方式来定位。
BuildTimeAnalyzer
用来找到瓶颈更加直观第一个直接添加警告的方式用来定位具体代码更准确
3.1 项目配置
为了结合两种方式,这里我的配置如下:
BuildTimeAnalyzer
分析结果
最高:
DataBaseDataCenter+Overview
耗时35075ms
案例1:较长的逻辑
这里是使用 WCDB
瓶颈显示的是连续的调用 WCDB
中的范型函数来获得一个 condition
进行数据库操作。
优化:拆分
Clean 后再 Build,查看是否有效:
DataBaseDataCenter+Overview
耗时由 35075ms
下降至 19007ms
,减少了近一半的时间。那么再把 DataBaseDataCenter+Overview
其他相同场景的代码也优化一下看看结果吧。
优化了另一处一样的场景后,时间降到了 915ms
。
案例2:字符串拼接
这里使用了 +
进行字符串的拼接
此处总耗时 2596ms
。
优化:使用 "xx\(xx)xx" 拼接
使用 \(preString)~\(endString)
的方式进行拼接
效果明显,降到了 617ms
。
案例3:少用 ??
此处用了较多的 ??
。整体耗时 3561ms
。
优化:提前 gurad/if let 解包或者减少调用 ?? 次数
整体降到了 855ms
。
四、 总结
此处列举了一些我在项目中的一些成功优化的点,当然还有一些没有找到合适优化方式的点。再有一些有价值的点结局的话我会再来更新进文中。而且这里是以个人项目作为小白鼠进行的优化,企业项目中一般可优化的地方就更多了。而且我们也不能为了优化而优化,不能影响了源代码的可读性与连贯性。
也欢迎大家交流补充
参考
Last updated