网络优化

使用 HTTP/2

HTTP/2 相比 HTTP/1.1 具有更快的请求多路复用能力,可以同时处理多个请求,减少连接时间。

如何启用 HTTP/2

  1. 服务器需支持 HTTP/2(如 Nginx、Apache)。
  2. 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 头,并缓存数据

图片缓存

对于图片加载,建议使用 KingfisherSDWebImage 进行缓存

限制并发请求

如果你的应用同时发起多个网络请求,可能会导致服务器过载或设备性能下降。因此,我们可以限制最大并发数:

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()

 

posted @   程石亮  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示