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。 阅读详情

相关推荐

抓包抖音充值页面实现微信支付宝充值抖币,可提供api

抓包抖音充值接口教程,实现微信支付宝充值抖币收款通道

eeeee1212的博客 1万+

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

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

strongerHuang 2415

Windows 24H2升级后eNSP AR_40报错40?VirtualBox虚拟化修复指南

虚拟化技术通过Hypervisor在操作系统与硬件间建立抽象层,使虚拟机能够共享物理资源。其核心原理依赖CPU的VT-x/AMD-V指令集,而Windows 24H2对内核隔离与驱动签名的强化会直接占用或拦截这些虚拟化资源。在工程实践中,VirtualBox作为Type-2型Hypervisor,常因内存完整性开启或版本过旧导致虚拟网卡创建失败,进而引发设备启动中断。典型场景包括网络仿真实验、多系统测试环境搭建等。当eNSP的AR_40路由器依赖VirtualBox引擎时,24H2的安全策略变更便会触发错误

weixin_34375251的博客 215

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

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

iOS_开发 223

Python+gensim【中文LDA】简洁模型

文章目录完整代码过程详解words_lsdictionarydictionary.doc2bow函数corpuslda 完整代码 from gensim import corpora, models import jieba.posseg as jp # 待分析文本集 text1 = '美国教练坦言,没输给中国女排,是输给了郎平' text2 = '中国女排世界排名第一?真实水平如何,听听巴西和美...

ArYe 2万+

Windows(Win10、Win11)本地部署开源大模型保姆级教程

最近开源大模型可谓闹的沸沸扬扬,尤其是Microsoft开源的和Meta开源的llama3 70b,评测都已经接近了的水平。鉴于还有很多同学不会在上部署和使用本地模型,因此我们出一期保姆级教程。本文讲述了如何在上本地部署大模型。从最基础的软件安装到环境配置都进行了截图展示,希望对非计算机的同学也有所帮助。AI时代我们每个人都必须要掌握一些AI知识,相信不断学习的你一定不会被AI淘汰。这只是开始,后面我们还有很多工作要做,尤其是提示词和智能体。

AIGIS的博客 3万+

优化 Xcode 编译时间

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

weixin_34008805的博客 525

1020空心杯电机驱动设计与ESP32实战

空心杯电机是一种高动态响应的直流微特电机,其驱动本质是解决电感负载下的大di/dt启动、反电动势耦合与电流纹波抑制问题。核心原理在于建立包含内阻、电感和反电动势的等效电路模型,并据此匹配开关器件、PWM参数与采样闭环。技术价值体现在小体积下实现毫秒级响应、低噪声(>30kHz)、高精度电流保护(±50mA)及热鲁棒性。典型应用于微型航模、手持云台与精密执行器等对功率密度和动态性能敏感的嵌入式系统。本文以1020规格空心杯电机为对象,基于ESP32平台完成从MOSFET选型、32kHz硬件PWM生成到INA2

weixin_42298164的博客 582

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

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

su350380433的博客 1328

IMU660RA姿态解算实战:从传感器滤波到欧拉角输出的完整实现

本文详细介绍了IMU660RA姿态解算的完整实现过程,从传感器滤波到欧拉角输出。通过实战案例和代码示例,展示了如何有效处理陀螺仪和加速度计的噪声问题,并选择合适的算法进行数据融合和姿态解算。特别强调了欧拉角输出中的坐标系对齐和动态补偿技巧,帮助工程师快速掌握IMU660RA的应用。

weixin_42524762的博客 386

瑞芯微RK3588部署YOLOv8模型

写下这篇博客进行记录,以防后面忘了怎么部署。

weixin_45303602的博客 3656

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

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

riwonk_520的博客 306

56、CAN总线RC低通滤波器截止频率计算与实战

本文详细探讨了CAN总线RC低通滤波器的设计与应用。作者通过实际项目案例,分析了CAN总线噪声频谱特性,提出截止频率计算的"黄金法则",强调需考虑收发器输入阻抗的并联效应。文章给出RC参数选择的经验值(R=100Ω-1kΩ,C=10pF-100pF),并指出PCB布局的关键要点:RC应紧贴收发器引脚,电容接地端需直接连接地平面。最后建议结合示波器和眼图验证效果,并提醒RC滤波器只是抗干扰方案的一部分,良好的PCB布局设计才是根本。

2401_88858637的博客 70

vlang语言的初识!

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

qq_40815295的博客 5184

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

于海明的博客 4367

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Swift语言的语法糖

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

2401_90032234的博客 1429

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

gitblog_00634的博客 1177

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

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

ProcePerch的博客 1071

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

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

gitblog_00927的博客 690

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

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

原来是泽镜的博客 445

优化 Swift 编译速度

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

weixin_33709609的博客 265

MCP Python SDK 部署与扩展:Host 白名单、多 Worker 与跨副本状态同步实战

本指南基于 MCP(Model Context Protocol)官方 Python SDK 的部署文档,系统讲解将 MCP 服务器从"本机可用"推进到"真实主机名 + 多 Worker"生产形态时必须掌握的几件事:Host/Origin 白名单(DNS rebinding 防护)、TLS 终止代理后的 uvicorn 配置、2026-07-28 协议的无状态特性与 Legacy 客户端的 sti

gitblog_00990的博客 1012

分析Swift项目的编译时间

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

davidbull1987的博客 318

Swift-scripts性能优化指南:加速大规模Swift项目的代码分析速度

Swift-scripts是一款专为Swift开发者打造的实用工具集,其中核心工具`unused.rb`能够帮助开发者快速定位项目中未使用的函数和变量,显著提升代码质量与维护效率。对于大规模Swift项目而言,代码分析速度直接影响开发效率,本文将分享如何通过优化配置与使用技巧,让Swift-scripts的代码分析速度提升300%。 ## 为什么代码分析速度至关重要? 随着Swift项目规模的

gitblog_00560的博客 842
上一篇: 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、付费专栏及课程。

余额充值