美文网首页
iOS网络请求性能监控

iOS网络请求性能监控

作者: 吕建雄 | 来源:发表于2020-11-12 16:36 被阅读0次

NSURLSessionTaskMetrics/NSURLSessionTaskTransactionMetrics

Apple 在 iOS 10 的 NSURLSessionTaskDelegate 代理中新增了 -URLSession: task:didFinishCollectingMetrics: 方法,如果实现这个代理方法,就可以通过该回调的 NSURLSessionTaskMetrics 类型参数获取到采集的网络指标,实现对网络请求中 DNS 查询/TCP 建立连接/TLS 握手/请求响应等各环节时间的统计

NSURLSessionTaskMetrics

NSURLSessionTaskMetrics 对象封装了 session task 的指标,每个NSURLSessionTaskMetrics 对象有 taskInterval 和 redirectCount 属性,还有在执行任务时产生的每个请求/响应事务中收集的指标

transactionMetrics:transactionMetrics 数组包含了在执行任务时产生的每个请求/响应事务中收集的指标

transactionMetrics

  taskInterval:任务从创建到完成花费的总时间,任务的创建时间是任务被实例化时的时间;任务完成时间是任务的内部状态将要变为完成的时间

taskInterval

  redirectCount:记录了被重定向的次数。

redirectCount

NSURLSessionTaskTransactionMetrics

NSURLSessionTaskTransactionMetrics 对象封装了任务执行时收集的性能指标,包括了 request 和 response 属性,对应 HTTP 的请求和响应,还包括了从 fetchStartDate 开始,到 responseEndDate 结束之间的指标,当然还有 networkProtocolName 和 resourceFetchType 属性

request:表示了网络请求对象

request

response:表示了网络响应对象,如果网络出错或没有响应时,response 为 nil。

response

networkProtocolName:获取资源时使用的网络协议,由 ALPN 协商后标识的协议,比如 h2, http/1.1, spdy/3.1

networkProtocolName

isProxyConnection:是否使用代理进行网络连接

isProxyConnection

isReusedConnection:是否复用已有连接。

isReusedConnection

resourceFetchType:NSURLSessionTaskMetricsResourceFetchType 枚举类型,标识资源是通过网络加载,服务器推送还是本地缓存获取的

resourceFetchType

对于下面所有 NSDate 类型指标,如果任务没有完成所有相应的endDate 指标都将为nil

例如,如果 DNS 解析超时、失败或者客户端在解析成功之前取消,domainLookupStartDate 会有对应的数据,然而 domainLookupEndDate 以及在它之后的所有指标都为 ni

date

下面这幅图示意了一次HTTP请求在各环节分别做了哪些工作

http work

如果是复用已有的连接或者从本地缓存中获取资源,下面的指标都会被赋值为 nil:

*  domainLookupStartDate

*  domainLookupEndDate

*  connectStartDate

*  connectEndDate

*  secureConnectionStartDate

*  secureConnectionEndDate

*  fetchStartDate:客户端开始请求的时间,无论资源是从服务器还是本地缓存中获取。

*  domainLookupStartDate:DNS 解析开始时间,Domain -> IP 地址。

*  domainLookupEndDate:DNS 解析完成时间,客户端已经获取到域名对应的 IP 地址

*  connectStartDate:客户端与服务器开始建立 TCP 连接的时间。

*  secureConnectionStartDate:HTTPS 的 TLS 握手开始时间

*  secureConnectionEndDate:HTTPS 的 TLS 握手结束时间

*  connectEndDate:客户端与服务器建立 TCP 连接完成时间,包括 TLS 握手时间

*  requestStartDate:开始传输 HTTP 请求的 header 第一个字节的时间

*  requestEndDate:HTTP 请求最后一个字节传输完成的时间

*  responseStartDate:客户端从服务器接收到响应的第一个字节的时间

*  responseEndDate:客户端从服务器接收到最后一个字节的时间

iOS网络监控方式有NSURLProtocol和代码注入(Hook),可通过NSURLProtocol实现监控的具体实现,然后分别在iOS中使用Method Swizzling、NSProxy、和fishhook进行AOP Hook。

iOS10之后新引入了NSURLSessionTaskMetrics和NSURLSessionTaskTransactionMetrics类,可以用来获取网络相关的元数据,

比如: DNS 查询、TLS 握手、请求响应等环节的耗时,这些数据可以帮助开发人员更好地分析网络性能

Apple官网参考

相关文章

  • iOS网络请求性能监控

    NSURLSessionTaskMetrics/NSURLSessionTaskTransactionMetric...

  • iOS端网络监控思路及实现

    一、背景 网络监控主要用于监控应用的网络请求,获取网络请求相关的性能参数,方便开发、测试、产品等人员对应用进行分析...

  • iOS 性能优化资料整理

    iOS 性能监控方案 Wedjat(上篇) iOS 性能监控方案 Wedjat(�下篇) 【Dev Club分享】...

  • iOS性能调优

    1.iOS 性能调优2.iOS性能调优(全)---内存优化和UI优化3.深度优化iOS网络模块4.iOS网络请求优...

  • iOS网络性能监控

    现在的Native App平台化趋势越来越明显,网络层架构也越来越复杂。一个App基本都有多个不同的网络模块。 从...

  • OpManager网络性能监控

    网络性能监控 OpManager – 综合、方便、可定制的ITOM网络性能监控软件 OpManager提供综合的网...

  • iOS网络-优化网络请求性能

    《Professional iOS Network Programming 读书笔记》 一,度量网络性能1、网络带...

  • Alamofire 网络请求

    网络监控、、、 、、、post 网络请求、、、 、、、 带参数 图片、视频网络请求、、、 、、、

  • docker 安装 zabbix

    zabbix 的作用:具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库性能监控、FTP...

  • 性能优化

    性能优化主要针对对网络性能与执行性能。 网络性能主要针对以下几种: 1 针对http请求,请求越少越好。 这就要求...

网友评论

      本文标题:iOS网络请求性能监控

      本文链接:https://www.haomeiwen.com/subject/glqyyktx.html