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

Flutter开发中如何获取成功HTTP请求的响应时间?

多公共端点对接场景下的HTTP请求响应时间统计方案

统计单请求响应时间核心要保证三点:数据精度足够、统计逻辑不侵入业务、不要把非网络请求的额外耗时算入结果,落地可以按下面的方式做:

通用拦截器埋点(全语言/全HTTP客户端适配)

不管你用什么技术栈,最稳妥的方式是在HTTP客户端的请求拦截层做统一埋点,不要在每个业务请求代码里零散加统计逻辑,避免漏统计或者统计口径不一致:

  • 禁止用系统墙钟时间做耗时计算,必须用单调时钟API,避免系统时间跳变(比如NTP校时)导致统计出负数或者异常大的耗时,不同技术栈对应API如下:
    • 前端/Node.js用performance.now()
    • Python用time.perf_counter()
    • Java/Go用纳秒级内置时间API
  • 统计维度不要只算总耗时,拆分分段数据对调优帮助更大:DNS解析耗时、TCP/TLS握手耗时、首字节等待时间、响应体下载时间
  • 统计结果要和请求元数据绑定:对应端点地址、请求方法、响应状态码、是否复用了连接池连接,方便后续聚合分析

给个Python requests库可直接复用的实现:

import time
import requests
from requests.adapters import HTTPAdapter

class TimingTrackingAdapter(HTTPAdapter):
    def send(self, request, **kwargs):
        req_start = time.perf_counter()
        resp = super().send(request, **kwargs)
        total_cost_ms = round((time.perf_counter() - req_start) * 1000, 2)
        resp.timing = {
            "total_ms": total_cost_ms,
            "endpoint": request.url
        }
        return resp

# 全局会话挂载适配器后,所有走这个会话的请求自动统计耗时
http_session = requests.Session()
http_session.mount("http://", TimingTrackingAdapter())
http_session.mount("https://", TimingTrackingAdapter())

如果是浏览器端场景,不需要手动埋点,直接用原生提供的性能API就能拿到所有请求的完整耗时数据:

// 过滤出接口请求的性能条目
const apiEntries = performance.getEntriesByType('resource')
  .filter(entry => ['fetch', 'xmlhttprequest'].includes(entry.initiatorType));

apiEntries.forEach(entry => {
  const timingData = {
    total_ms: Math.round(entry.duration),
    dns_ms: entry.domainLookupEnd - entry.domainLookupStart,
    tcp_ms: entry.connectEnd - entry.connectStart,
    tls_ms: entry.secureConnectionStart ? entry.connectEnd - entry.secureConnectionStart : 0,
    ttfb_ms: entry.responseStart - entry.requestStart,
    download_ms: entry.responseEnd - entry.responseStart
  }
  // 这里可以把数据上报到你的性能分析存储中
  console.log(entry.name, timingData);
});

统计分析避坑要点

  • 不要在耗时统计的逻辑里加阻塞操作,比如同步打大段日志、同步写库,否则会把额外开销算到请求耗时里,导致数据不准
  • 聚合分析的时候不要只看平均耗时,重点看P95、P99分位值,平均耗时会被大量正常的快请求拉低,完全反映不了慢请求问题
  • 不同公共端点的耗时要分开聚合,不要把所有接口的数据混在一起算,否则根本定位不到具体是哪个端点性能差
  • 用了HTTP连接池的场景,要给统计数据加「是否新建连接」的标记,新建连接的请求会额外多DNS、握手开销,和复用连接的请求混在一起统计会让数据波动极大,没有参考价值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:51:28