网络问题排查
问题
App 请求失败率高、响应慢,如何排查?
答案
排查工具
| 工具 | 用途 |
|---|---|
| Charles / Proxyman | HTTPS 抓包 |
| 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 提示。