前言
本文将从代码层面探究如何分析并优化 Swift
代码的编译速度。这里就拿我个人项目(小白鼠)梦见账本来进行一次优化吧。
更多 iOS 独立开发相关文章欢迎移步专栏「Lawliet 的独立开发碎碎念」
- Wechat: RyukieW
- 公众号:LabLawliet
- 📦 技术文章归档
- 🐙 Github
本文将从代码层面探究如何分析并优化 Swift
代码的编译速度。这里就拿我个人项目(小白鼠)梦见账本来进行一次优化吧。
更多 iOS 独立开发相关文章欢迎移步专栏「Lawliet 的独立开发碎碎念」
我的个人项目 | 扫雷 Elic 无尽天梯 | 梦见账本 |
---|---|---|
类型 | 游戏 | 财务 |
AppStore | Elic | Umemi |
通过警告的形式标识出超出设定值的代码,下面以设置 100ms
为界限为例
在 BuildSettings
中 other swift flags
下添加下面的配置:
仅在
DEBUG
下添加就行了,毕竟只是用来检测
Clean
后编译一次,这里就可以看到很多的警告了:
你可能觉得这样检测有点不方便,毕竟项目的警告可能有几百上千个。下面介绍一个工具:BuildTimeAnalyzer-for-Xcode
首先 Clone 项目代码(或者直接下载代码)
git clone https://github.com/RyukieSama/BuildTimeAnalyzer-for-Xcode.git
复制代码
这里我对使用步骤用中文详细进行了说明,并编译了成品 App,如果你觉得不错,欢迎留下一颗小⭐️~
在 BuildSettings
中 other swift flags
下添加下面的配置:
然后 Clean
项目,重新 Build
。
这里有三种方式来使用
Product - Archive
导出一个 App 文件,以后即可直接使用了。
这里我搞好了一个包,直接可用。支持 Intel
, Apple Silicon
。
在列表中点击刚才自己的配置完成并编译后的项目,即可查看日志。
显示了整体编译耗时,还标有具体代码的行数与函数名,点击可跳转。
每次时间不一定一样,根据电脑运行情况会有一些变化,但是整体的瓶颈趋势还是基本一致的
这里个人建议结合上面两种方式来定位。
BuildTimeAnalyzer
用来找到瓶颈更加直观为了结合两种方式,这里我的配置如下:
BuildTimeAnalyzer
分析结果
DataBaseDataCenter+Overview
耗时 35075ms
这里是使用 WCDB
瓶颈显示的是连续的调用 WCDB
中的范型函数来获得一个 condition
进行数据库操作。
Clean 后再 Build,查看是否有效:
DataBaseDataCenter+Overview
耗时由 35075ms
下降至 19007ms
,减少了近一半的时间。那么再把 DataBaseDataCenter+Overview
其他相同场景的代码也优化一下看看结果吧。
优化了另一处一样的场景后,时间降到了 915ms
。
这里使用了 +
进行字符串的拼接
此处总耗时 2596ms
。
使用 \(preString)~\(endString)
的方式进行拼接
效果明显,降到了 617ms
。
此处用了较多的 ??
。整体耗时 3561ms
。
整体降到了 855ms
。
此处列举了一些我在项目中的一些成功优化的点,当然还有一些没有找到合适优化方式的点。再有一些有价值的点结局的话我会再来更新进文中。
本次是以个人项目作为小白鼠进行的优化,企业项目中一般可优化的地方就更多了。但我们也不能为了优化而优化,不能影响了源代码的可读性与连贯性。
如果你有一些代码层面优化的经验的话,也欢迎大家交流补充~(联系方式在文章开头)
本问来自:
作者:Ryukie_Lawliet
链接:https://juejin.cn/post/7005352490996596773
来源:稀土掘金