You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中如何实现iOS类似的网络字节指标追踪?

React Native中通过Axios实现NSURLSessionTaskMetrics类似的字节追踪功能

在iOS 13.0及以上版本中,NSURLSessionTaskMetrics提供以下属性用于网络请求字节统计:

@available(iOS 13.0, *)
open var countOfResponseBodyBytesReceived: Int64 { get }

@available(iOS 13.0, *)
open var countOfResponseBodyBytesAfterDecoding: Int64 { get }

其中:

  • countOfResponseBodyBytesReceived:从服务器接收的原始总字节数(含压缩、编码格式)
  • countOfResponseBodyBytesAfterDecoding:响应体经过解码/解压后的实际数据大小

针对React Native项目,使用Axios实现对应功能的方案如下:

1. 追踪接收的总字节数(对应countOfResponseBodyBytesReceived)

利用Axios的onDownloadProgress回调可实时获取已接收的字节数,请求完成时的loaded值即为总接收字节数,该值对应服务器传输的原始字节(含gzip等压缩格式)。

代码示例:全局拦截器统一处理

import axios from 'axios';

const axiosInstance = axios.create();

// 请求拦截器:统一注入下载进度监听
axiosInstance.interceptors.request.use(config => {
  config.onDownloadProgress = progressEvent => {
    // 请求完成时,loaded即为总接收字节数
    if (progressEvent.loaded) {
      console.log(`总接收字节数: ${progressEvent.loaded}`);
      // 可将该值存入全局状态或上报至统计系统
    }
  };
  return config;
});

// 使用实例发起请求
axiosInstance.get('https://example.com/api/data')
  .then(response => { /* 处理响应 */ })
  .catch(error => { /* 处理错误 */ });

2. 计算解码后的响应体大小(对应countOfResponseBodyBytesAfterDecoding)

Axios会自动处理响应的解码逻辑(如gzip解压、JSON解析),response.data即为解码后的数据。根据数据类型不同,计算方式如下:

代码示例:响应拦截器中统一计算

axiosInstance.interceptors.response.use(response => {
  let decodedSize = 0;
  const data = response.data;

  if (typeof data === 'string') {
    // 字符串类型:转UTF-8字节数组计算长度
    decodedSize = new TextEncoder().encode(data).length;
  } else if (typeof data === 'object' && data !== null) {
    // JSON对象:先序列化为字符串再计算字节数
    const jsonStr = JSON.stringify(data);
    decodedSize = new TextEncoder().encode(jsonStr).length;
  } else if (data instanceof Blob) {
    // Blob类型:直接使用原生size属性
    decodedSize = data.size;
  }

  console.log(`解码后响应体大小: ${decodedSize}`);
  // 将计算结果挂载到response对象,供后续业务逻辑使用
  response.decodedBodySize = decodedSize;
  return response;
});

可选优化:使用Axios扩展库

如果需要更完善的指标追踪能力,可尝试axios-metrics这类Axios扩展库,它封装了请求时长、字节统计等常用指标,无需手动实现基础逻辑。

内容的提问来源于stack exchange,提问作者Siddhant Shelake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:22:40