跳到主要内容

网络问题排查

问题

App 请求失败率高、响应慢,如何排查?

答案

排查工具

工具用途
Charles / ProxymanHTTPS 抓包
Instruments → Network网络请求时序
URLSessionTaskMetrics请求各阶段耗时
Network Link Conditioner模拟弱网

请求耗时分析

func urlSession(_ session: URLSession, task: URLSessionTask,
didFinishCollecting metrics: URLSessionTaskMetrics) {
for m in metrics.transactionMetrics {
print("DNS: \(m.domainLookupEndDate?.timeIntervalSince(m.domainLookupStartDate!) ?? 0)s")
print("TCP: \(m.connectEndDate?.timeIntervalSince(m.connectStartDate!) ?? 0)s")
print("TLS: \(m.secureConnectionEndDate?.timeIntervalSince(m.secureConnectionStartDate!) ?? 0)s")
print("Request: \(m.requestEndDate?.timeIntervalSince(m.requestStartDate!) ?? 0)s")
print("Response: \(m.responseEndDate?.timeIntervalSince(m.responseStartDate!) ?? 0)s")
}
}

常见问题及优化

问题原因优化
DNS 慢运营商 DNS 解析慢接入 HTTPDNS
连接慢TLS 握手耗时连接复用、HTTP/2
弱网超时3G/Edge 信号差动态超时、降级策略
请求失败证书/域名问题检查 ATS 和证书配置

常见面试问题

Q1: 弱网下如何保证用户体验?

答案:通过 NWPathMonitor 检测网络类型(WiFi/Cellular/None),弱网时降级:降低图片质量、减少并发数、增大超时时间、展示缓存数据、加 loading 提示。

相关链接