网络优化
使用 HTTP/2
HTTP/2 相比 HTTP/1.1 具有更快的请求多路复用能力,可以同时处理多个请求,减少连接时间。
如何启用 HTTP/2
- 服务器需支持 HTTP/2(如 Nginx、Apache)。
URLSession
默认支持 HTTP/2,无需额外配置。
连接复用
URLSession
默认会使用持久连接(Keep-Alive),减少频繁创建连接的开销:
let configuration = URLSessionConfiguration.default configuration.httpShouldUsePipelining = true // 启用 HTTP/2 连接复用 let session = URLSession(configuration: configuration)
Gzip 压缩
启用 Gzip 压缩可以减少响应数据大小,提高加载速度:
var request = URLRequest(url: URL(string: "https://api.example.com")!) request.setValue("gzip", forHTTPHeaderField: "Accept-Encoding")
使用 URLSession 内置缓存
URLSession
具有自动缓存机制,可以减少重复请求:
let configuration = URLSessionConfiguration.default configuration.urlCache = URLCache(memoryCapacity: 10 * 1024 * 1024, diskCapacity: 50 * 1024 * 1024, diskPath: nil) configuration.requestCachePolicy = .returnCacheDataElseLoad let session = URLSession(configuration: configuration)
使用自定义缓存策略
可以手动检查 Cache-Control
头,并缓存数据
图片缓存
对于图片加载,建议使用 Kingfisher 或 SDWebImage 进行缓存
限制并发请求
如果你的应用同时发起多个网络请求,可能会导致服务器过载或设备性能下降。因此,我们可以限制最大并发数:
let configuration = URLSessionConfiguration.default configuration.httpMaximumConnectionsPerHost = 5 // 限制最大并发数 let session = URLSession(configuration: configuration)
弱网下最好设置并发数为1,避免多个数据包相互影响,会延长整体的数据传输时长
使用 OperationQueue
使用 OperationQueue
控制请求并发
设置优先级
自定义请求队列,设置请求优先级,高优先级请求进来时,插队优先处理,可以防止低优先级请求占用带宽影响高优先级请求的响应时间
设置超时时间
避免网络请求长时间卡住:
var request = URLRequest(url: URL(string: "https://api.example.com")!) request.timeoutInterval = 10 // 10 秒超时
超时时长需要区分网络环境,比如2g可以设置长点,5g或wifi可以适当减少
另外超时时长可采用指数退避策略,最大为60s
失败重试
当请求失败时,可以尝试自动重试,如果无网络的时候不要重试,避免切换到有网络时候堵塞通道。
后台下载优化
如果应用需要下载大文件,可以使用 background
模式,即使应用被挂起,下载仍会继续进行。
let configuration = URLSessionConfiguration.background(withIdentifier: "com.example.download") let session = URLSession(configuration: configuration) let task = session.downloadTask(with: URL(string: "https://example.com/largefile.zip")!) task.resume()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架