小程序和小游戏网络相关 API 使用方式相同, 所以我们用网络接口来统称
# Android
- request/download 接口从客户端 7.0.12 版本开始, 回调中提供了 profile 信息, 给出了网络连接过程中关键时间点的耗时信息, 具体含义如下
名称 | 含义 |
---|---|
redirectStart | 第一个 HTTP 重定向发生时的时间. 有跳转且是同域名内的重定向才算, 否则值为 0 |
redirectEnd | 最后一个 HTTP 重定向完成时的时间. 有跳转且是同域名内部的重定向才算, 否则值为 0 |
fetchStart | 组件准备好使用 HTTP 请求抓取资源的时间, 这发生在检查本地缓存之前 |
domainLookupStart | DNS 域名查询开始的时间, 如果使用了本地缓存 (即无 DNS 查询) 或持久连接, 则与 fetchStart 值相等 |
domainLookupEnd | DNS 域名查询完成的时间, 如果使用了本地缓存 (即无 DNS 查询) 或持久连接, 则与 fetchStart 值相等 |
connectStart | TCP 开始建立连接的时间, 如果是持久连接, 则与 fetchStart 值相等. 注意如果在传输层发生了错误且重新建立连接, 则这里显示的是新建立的连接开始的时间 |
connectEnd | TCP 完成建立连接的时间 (完成握手), 如果是持久连接, 则与 fetchStart 值相等. 注意如果在传输层发生了错误且重新建立连接, 则这里显示的是新建立的连接完成的时间. 注意这里握手结束, 包括安全连接建立完成、SOCKS 授权通过 |
SSLconnectionStart | SSL 建立连接的时间, 如果不是安全连接, 则值为 0 |
SSLconnectionEnd | SSL 建立完成的时间, 如果不是安全连接, 则值为 0 |
requestStart | HTTP 请求读取真实文档开始的时间 (完成建立连接), 包括从本地读取缓存. 连接错误重连时, 这里显示的也是新建立连接的时间 |
requestEnd | HTTP 请求读取真实文档结束的时间 |
responseStart | HTTP 开始接收响应的时间 (获取到第一个字节), 包括从本地读取缓存 |
responseEnd | HTTP 响应全部接收完成的时间 (获取到最后一个字节), 包括从本地读取缓存 |
rtt | 当次请求连接过程中实时 rtt |
estimate_nettype | 评估的网络状态 unknown, offline, slow 2g, 2g, 3g, 4g, last/0, 1, 2, 3, 4, 5, 6 |
httpRttEstimate | 协议层根据多个请求评估当前网络的 rtt (仅供参考) |
transportRttEstimate | 传输层根据多个请求评估的当前网络的 rtt (仅供参考) |
downstreamThroughputKbpsEstimate | 评估当前网络下载的kbps, 根据最近的几次请求的rtt, 回包情况, 结合当前的网络情况, 进行的一个网络评估结果 |
throughputKbps | 当前网络的实际下载kbps, 根据本次请求实际计算的一个下载值, 从开始请求到 请求结束收到的 字节数 * 8/请求耗时 |
peerIP | 当前请求的目标IP |
port | 当前请求的目标端口 |
protocol | 当前请求使用的协议 |
socketReused | 是否复用连接 |
sendBytesCount | 发送的字节数 |
receivedBytedCount | 收到字节数 |
整个请求链路为 DNS -> Connect -> SSL -> request -> response; 表中 rtt 是连接过程中实时的 rtt, 每个阶段都会更新, 而 httpRttEstimate 和 transportRttEstimate 是结合前序请求计算的综合值
- websocket 接口从客户端 7.0.12 版本开始, 在 onOpen 回调中提供了 profile 信息, 给出了网络连接过程中关键时间点的耗时信息, 具体含义如下
名称 | 含义 |
---|---|
fetchStart | 组件准备好使用 SOCKET 建立请求的时间, 这发生在检查本地缓存之前 |
domainLookupStart | DNS 域名查询开始的时间, 如果使用了本地缓存 (即无 DNS 查询) 或持久连接, 则与 fetchStart 值相等 |
domainLookupEnd | DNS 域名查询完成的时间, 如果使用了本地缓存 (即无 DNS 查询) 或持久连接, 则与 fetchStart 值相等 |
connectStart | 开始建立连接的时间, 如果是持久连接, 则与 fetchStart 值相等. 注意如果在传输层发生了错误且重新建立连接, 则这里显示的是新建立的连接开始的时间 |
connectEnd | 完成建立连接的时间 (完成握手), 如果是持久连接, 则与 fetchStart 值相等. 注意如果在传输层发生了错误且重新建立连接, 则这里显示的是新建立的连接完成的时间. 注意这里握手结束, 包括安全连接建立完成、SOCKS 授权通过 |
rtt | 单次连接的耗时, 包括 connect, tls |
handshakeCost | 握手耗时 |
cost | 上层请求到返回的耗时 |
整个请求链路为 DNS -> Connect; 表中 connectEnd - connectStart
代表纯 tcp 连接耗时, domainEnd - domainStart
代表域名解析耗时; 上述两步耗时加上 handshakeCost 代表单次连接请求的耗时
# iOS
- request/download 接口从客户端 8.0.3 版本开始提供 profile 能力
- websocket 接口从客户端 7.0.20 版本开始提供 profile 能力
# 提示
- 当遇到网络问题时, 除了判断网络状态是否连通外, 还可以通过 rtt 来分析用户当前网络状况, 用以动态调整超时参数
- 网络请求提供 enableProfile 参数, 默认值为 true, 可以通过传入 false 关闭