NSURLSessionTaskMetrics
是 iOS 中 NSURLSession
框架的一部分,用于收集和报告一个 NSURLSessionTask
(如数据任务、下载任务或上传任务)执行时的性能指标。NSURLSessionTaskMetrics
提供了有关请求的详细信息,这些信息对于分析和优化网络请求的性能非常有用。
主要功能和属性
NSURLSessionTaskMetrics
包含一系列指标,这些指标反映了 NSURLSessionTask
从开始到完成的各个阶段的性能。这些指标包括但不限于:
taskInterval
: 表示任务从开始到完成的时间间隔。redirectCount
: 重定向的次数。transactionMetrics
: 一个包含NSURLSessionTaskTransactionMetrics
对象的数组,每个对象描述一次从请求到响应的完整生命周期。
NSURLSessionTaskTransactionMetrics
每个 NSURLSessionTaskTransactionMetrics
对象包含更详细的信息,包括:
fetchStartDate
: 开始获取资源的时间。responseEndDate
: 完成响应接收的时间。networkProtocolName
: 网络协议的名称,如 “http/1.1” 或 “h2”(HTTP/2)。isProxyConnection
: 指示是否通过代理服务器建立连接。isReusedConnection
: 指示连接是否被重用。resourceFetchType
: 资源获取类型(如网络加载、缓存加载等)。
如何使用 NSURLSessionTaskMetrics
要使用 NSURLSessionTaskMetrics
,你需要实现 NSURLSessionTaskDelegate
中的 URLSession:task:didFinishCollectingMetrics:
方法。这个方法会在任务完成时被调用,并传递给你一个包含 NSURLSessionTaskMetrics
对象的回调。
示例代码
import Foundation
class NetworkManager: NSObject, URLSessionDelegate, URLSessionTaskDelegate {
lazy var session: URLSession = {
let config = URLSessionConfiguration.default
return URLSession(configuration: config, delegate: self, delegateQueue: nil)
}()
func startDownloadTask(with url: URL) {
let task = session.dataTask(with: url)
task.resume()
}
// NSURLSessionTaskDelegate method
func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {
// 打印 task 的总时长
print("Task completed in: \(metrics.taskInterval.duration) seconds")
// 遍历每个 transaction 的 metrics
for transactionMetric in metrics.transactionMetrics {
print("Fetch started at: \(transactionMetric.fetchStartDate)")
print("Response ended at: \(transactionMetric.responseEndDate)")
print("Network protocol used: \(transactionMetric.networkProtocolName ?? "N/A")")
print("Is proxy connection: \(transactionMetric.isProxyConnection)")
print("Is reused connection: \(transactionMetric.isReusedConnection)")
}
}
}
// 使用示例
let url = URL(string: "https://example.com")!
let networkManager = NetworkManager()
networkManager.startDownloadTask(with: url)
应用场景
- 性能分析:通过分析
NSURLSessionTaskMetrics
,你可以找到请求的瓶颈,例如 DNS 解析时间长、连接建立慢等。 - 优化网络请求:根据收集的指标数据,你可以调整请求策略,比如使用缓存、减少重定向等。
- 监控和日志记录:在生产环境中,你可以将这些指标数据记录下来,帮助诊断网络问题。
NSURLSessionTaskMetrics
是一个强大的工具,能够帮助开发者深入了解网络请求的内部工作机制,从而优化应用的网络性能。
Metrics 应该如何发音 ?
当然可以!“Metrics” 的音标发音是 /ˈmɛtrɪks/。
- /ˈmɛ/:类似于中文拼音的“美(mei)”的开头音。
- /trɪks/:前半部分“tr”发音类似“特瑞(t-ree)”,后半部分“ɪks”发音类似于“克斯(ks)”。
完整发音为:/ˈmɛtrɪks/。