swift不优雅的实现对网络请求各个阶段的时间监测

1,645 阅读1分钟
//在URLSessionTask 的delegate中实现

   func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {

    
    let lookupDNSTime: Int = dateToMilliSecondsDif(dateStart: metrics.transactionMetrics[0].domainLookupStartDate   , dateEnd: metrics.transactionMetrics[0].domainLookupEndDate) ?? 0
    
    print("\("DNS查询时间 =")\(lookupDNSTime)")
    
    let connectionTime: Int = dateToMilliSecondsDif(dateStart: metrics.transactionMetrics[0].connectStartDate   , dateEnd: metrics.transactionMetrics[0].connectEndDate) ?? 0
    
    print("\("connectionTime")\(connectionTime)")
    
    let requestTime: Int = dateToMilliSecondsDif(dateStart: metrics.transactionMetrics[0].requestStartDate   , dateEnd: metrics.transactionMetrics[0].requestEndDate) ?? 0
    
    print("\("requestTime")\(requestTime)")
    
    
    let responseTime: Int = dateToMilliSecondsDif(dateStart: metrics.transactionMetrics[0].responseStartDate   , dateEnd: metrics.transactionMetrics[0].responseEndDate) ?? 0
           
           print("\("responseTime")\(responseTime)")

}

//计算时间的私有函数

    private func dateToMilliSecondsDif(dateStart: Date?, dateEnd: Date?) -> Int? {

    if dateStart != nil && dateEnd != nil {
        
        let  intervalEnd:TimeInterval = dateEnd!.timeIntervalSince1970
        let  intervalStart:TimeInterval = dateStart!.timeIntervalSince1970

        let end:Int = Int(intervalEnd)
        let start: Int = Int(intervalStart)
        
        return end * 1000 - start * 1000
    }else{
        
        return nil
    }
}