Swift语法对编译速度的影响

Swift编译器Crash—Segmentation fault解决方案 背景抖音上线 Swift 后,编译时偶现Segmentation fault: 11和Illegal instruction: 4的错误,CI/CD 和本地均有出现,且重新编译后均可恢复正... 阅读详情

Swift语法对编译速度的影响


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

在混编Swift两年后,工程的编译速度到了忍无可忍的程度。通过网上搜寻“如何提高Xcode编译速度”把能做的优化都做了之后,还是没有得到根本的提升。直到发现了这篇文章Regarding Swift build time optimizations,它采用了一个开源工具来检测每一个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 ms
dict["b"] = b ?? "" // 27 ms
dict["c"] = c ?? "" // 25 ms
dict["d"] = d ?? "" // 27 ms
dict["e"] = e ?? "" // 26 ms
dict["f"] = f ?? "" // 26 ms
dict["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的前提下享受到优化

Objective-C与Swift的性能对比 因此,在可预见的未来,Objective-C和Swift将共同存在于iOS和macOS应用开发领域,相互补充,共同发展。由于Swift采用了新的构建系统,可以更快地解析和优化代码,因此在编译大型项目时,Swift编译速度通常比Objective-C更快。值得注意的是,虽然Swift在某些方面具有优势,但在某些特定场景下,Objective-C可能仍然具有竞争力。例如,在处理底层系统调用或进行性能关键的优化时,Objective-C的C语言基础可能使其具有更高的执行效率。来自:qghhzx.cn。 阅读详情

相关推荐

程序员提高代码编译速度,都怎么做的?

关注+星标公众号,不错过精彩内容作者 |strongerHuang微信公众号 | 嵌入式专栏程序员做软件开发,讨厌一件事,那就是编译代码速度很慢的问题。编码一分钟,编译十分钟,这谁能受的...

strongerHuang 2407

优化 Xcode 编译时间

最近在使用 Swift 开发项目时,发现编译时间实在是慢的出奇。每次 git 切换分支之后,都得编译好久,而且动辄卡死。有时候改了一点小地方想 debug 看下效果,也得编译那么好一会儿,实在是苦不堪言。所以下决心要好好研究一下,看看有没有什么优化 Xcode 编译时间的好办法。 本文中有不少实验数据,都是对基于现有项目进行的简单测试,优化效果仅供参考

weixin_34008805的博客 522

编写高性能 Swift - 模块整体优化

????????关注后回复“进群”,拉你进程序员交流群????????来源丨知识小集(ID:zsxjtip)高性能代码是每个开发工程师应有的追求。在 Swift 官方 Github 上...

iOS_开发 222

Swift java编译速度_Swift的运行效率让我吓尿了

该楼层疑似违规已被系统折叠隐藏此楼查看此楼做了一个很简单的测试,计算0到10000000的和,和java,python对比/////////////////////////////////////////////////////////Swift代码////////////////////////////////////////////import Foundationletstart = CF...

weixin_33783283的博客 647

iOS编译语言 | 如何优化iOS应用编译过程

对于新开发的应用,Swift无疑是更好的选择,它提供了更高的执行效率和更快的编译速度。随着科技的发展,编程已经成为一项必备的现代技能,学习编程不仅是为了未来的职业规划,也是为了培养孩子们的综合能力。Objective-C是iOS开发早期的主要编程语言,虽然Swift在近年来逐渐取代了Objective-C的位置,但两者在编译过程中的作用仍然密不可分。编程还能够帮助孩子们提高数学能力和抽象思维能力。在编程的过程中,他们需要不断地进行逻辑推理和问题分析,这对于培养他们的数学思维和解决复杂问题的能力大有裨益。

riwonk_520的博客 304

vlang语言的初识!

​就在今天,在GitHub上vlang已经成为Top1并拥有了五千多star。 越来越多的程序们对这门新生语言进行了关注! 下面来对vlang进行一些简单的介绍。 介绍 V是一种静态类型的编译编程语言,用于构建可维护的软件。 它与Go类似,也受到Oberon,Rust,Swift影响。 V是一种非常简单的语言。通过这个文档将花费你大约半个小时,到最后你将学习几乎整个语言。 尽管...

qq_40815295的博客 5174

swift 影响Xcode编译速度的注意事项

、、、、、首先尝试次方发,看起来很有效 背景 随着 Xcode8 和 swift3.0 的正式到来,我开始着手将 swift2.3 的项目转到 swift3 (至于转换过程,这里不多做介绍,Xcode自带的转换工具,基本可以转换80%左右,剩下的自己慢慢调试即可。)但是,转到swift3只会,在用Xcode8编译,发现编译过程变得非常慢,哪怕打一个空格,都要重新编译很久。于是在网上

于海明的博客 4361

Swift语言的语法

在编程语言中,"语法糖"指的是一些语法特性,它们使得代码更加易读和易写,但并不提供新的功能。换句话说,语法糖仅仅是对现有功能的语法上的简化,目的在于提高代码的可读性和编写效率。

2401_90032234的博客 1428

iOS编译优化终极指南:如何快速提升Swift/Objective-C编译速度

作为一名iOS开发者,你是否曾经历过这样的场景:修改一行代码后,等待编译的时间足够你喝杯咖啡?😅 随着项目规模扩大,编译时间逐渐成为开发效率的瓶颈。本文将为你揭秘iOS编译优化的核心技巧,让你的开发效率大幅提升! ## 📊 编译时间为什么如此重要? 在iOS开发中,编译时间直接影响开发者的工作效率和开发体验。当你的项目达到一定规模时,每次编译可能需要几分钟甚至更长时间。这不仅浪费宝贵的时间

gitblog_00634的博客 1156

Swift编译优化黑科技】:让构建速度提升70%的秘密配方

掌握Swift性能优化技巧,显著提升编译速度。适用于大型项目构建,通过精简依赖、启用增量编译与优化索引流程,实测构建效率提升70%。方法实用,效果显著,值得收藏。

ProcePerch的博客 1070

告别Swift编译等待:3分钟学会用Build Time Analyzer优化Xcode构建速度 [特殊字符]

还在为Swift项目漫长的编译时间而烦恼吗?每次修改代码都要等待几十秒甚至几分钟才能看到结果?Build Time Analyzer for Xcode正是解决这一痛点的利器!这款macOS应用专门分析Swift构建时间,帮你快速定位编译瓶颈,让你的开发效率提升数倍。无论你是iOS开发新手还是经验丰富的工程师,都能通过这款工具显著优化开发体验。 ## 🔍 为什么你的Swift项目编译这么慢?

gitblog_00927的博客 681

Swift编译慢?教你如何10倍提速,全套开源

Github开源,附详细使用教程 一、概述 距离上一篇iOS二进制编译方案(iOS如何提高10倍以上编译速度)已经快过去半年了,期间收到了很多来着小伙伴们的支持。cocoapods-imy-bin这套系统也在我司(美柚)跑满了上万条的打包记录,目前表现依然是很稳定。 鉴于目前市场上,SwiftSwift-OC混编项目流行,且Swift编译项目过慢的问题,在业务繁忙之瑕,做了对SwiftSwift-OC项目的二进制组件化的支持。希望能给小伙伴们在iOS编译的问题上,提供帮助。 二、项目效果 直接上图.

su350380433的博客 1321

Swift编译慢?请看这里,全套开源

一、概述 距离上一篇iOS二进制编译方案(iOS如何提高10倍以上编译速度)已经快过去半年了,期间收到了很多来着小伙伴们的支持。cocoapods-imy-bin这套系统也在我司(美柚)跑满了上万条的打包记录,目前表现依然是很稳定。 鉴于目前市场上,SwiftSwift-OC混编项目流行,且Swift编译项目过慢的问题,在业务繁忙之瑕,做了对SwiftSwift-OC项目的二进制组件化的支持。希望能给小伙伴们在iOS编译的问题上,提供帮助。 二、项目效果 我们Cocoapods-imy-bin项目,同

原来是泽镜的博客 444

优化 Swift 编译速度

这两天 Uber 的开发团队在一个大会上分享了用 Swift 3 重写客户端的过程, 视频里介绍了一个很黑科技的技巧, 可以极大地加快编译速度, 我自己试了一下之后发现确实有效, 但也有小坑, 在这里跟大家分享一下. Uber 的开发团队偶然发现如果把所有 Model 文件全部合并到一个文件去编译, 那编译时间会从 1min 35s 减少到 17s, 那么我们如果把所有代码文件都合并到一起, 那就...

weixin_33709609的博客 264

Swift 6编译优化终极指南:提升开发效率的完整教程

你是不是经常遇到Swift项目编译缓慢的困扰?每次修改代码后都要等待漫长的编译时间,影响了开发效率?Swift 6带来了革命性的编译优化技术,让你的项目构建速度大幅提升!本文将为你揭秘Swift 6中的编译优化技巧、泛型性能改进和元编程新特性,帮助你打造更高效的开发工作流。 ## 为什么Swift编译速度如此重要? 在大型Swift项目中,编译时间直接影响开发者的工作效率。想象一下,每次修改代

gitblog_00990的博客 990

分析Swift项目的编译时间

本文翻译自:Profiling your Swift compilation times 我遇到一个问题。我正在开发的一个全新的应用-是100%用Swift来写的。考虑到这个项目只有大概200个文件,我注意到它需要的编译时间超过了我的想象,更重要的是,它比前几个星期的编译速度慢了很多。在这个问题变得越来越糟糕之前,我需要尽快找到问题的根源。 第一步是添加 -Xfrontend -...

davidbull1987的博客 316
上一篇: iOS App间常用的五种通信方式
下一篇: YUV颜色编码解析
Philm_iOS
博客等级 码龄8年 74粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值