Skip to content
Menu
Yuuk的博客
  • 首页
  • 前端技术
    • JavaScript
    • HTML & CSS
  • SEO
  • 设计
    • 素材分享
    • 设计教程
  • 随笔
Yuuk的博客

axios 给每一个请求添加耗时统计

Posted on 2022年12月10日2022年12月10日 by yuuk

如果你想在使用 axios 发送请求时统计请求的耗时,可以使用 axios 的拦截器来实现。

首先,在发送请求之前,你可以在拦截器中记录下请求开始的时间,然后在请求完成之后,再在拦截器中计算出请求的耗时。

例如,你可以使用如下代码来实现请求耗时的统计:

// 记录请求开始的时间
const start = Date.now()

// 在请求完成之后,计算请求的耗时
axios.interceptors.response.use(response => {
  const end = Date.now()
  const elapsed = end - start
  console.log(`请求耗时:${elapsed}ms`)
  return response
})

如果你的应用场景中存在多个请求并发的情况,那么上面的代码可能会出现问题,因为它只能处理单个请求的耗时。为了解决这个问题,你可以在发送请求时,为每个请求附带一个唯一的标识,然后在拦截器中,通过这个标识来统计每个请求的耗时。

下面是一个完整的例子,它使用 axios 的拦截器来实现对请求耗时的统计:

// 用于存储每个请求的耗时信息
const requestTiming = {}

// 生成唯一标识
function generateRequestId() {
  return Math.random().toString(36).substr(2)
}

// 记录请求开始的时间
axios.interceptors.request.use(config => {
  const requestId = config.headers['X-Request-Id']
  if (!requestId) {
    // 如果请求中没有携带 X-Request-Id 字段,则为该请求生成一个唯一标识
    config.headers['X-Request-Id'] = generateRequestId()
  }
  requestTiming[config.headers['X-Request-Id']] = Date.now()
  return config
})

// 在请求完成之后,计算请求的耗时
axios.interceptors.response.use(response => {
  const requestId = response.headers['X-Request-Id']
  const start = requestTiming[requestId]
  if (start) {
    const end = Date.now()
    const elapsed = end - start
    console.log(`请求(ID: ${requestId})耗时:${elapsed}ms`)
    delete requestTiming[requestId]
  }
  return response
})

// 发送请求
axios.get('https://www.example.com/')
  .then(response => {
    console.log(response.data)
  })
打赏赞分享

1 thought on “axios 给每一个请求添加耗时统计”

  1. ddd说道:
    2024年8月9日 上午10:36

    如果没有后端配合,request 携带的 header 这个 X-Request-Id 不会被保持到 response 里的

    回复

回复 ddd 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

搜索

近期文章

  • 宝塔面板中使用docker部署nodejs应用
  • 如何将docker镜像上传到阿里云
  • React Native 报错 No bundle URL present 解决方法
  • axios 给每一个请求添加耗时统计
  • css filter属性导致fixed失效

标签

addEventListener ajax ajax跨域 chatAt css居中 DNS缓存 docker gulp ie7 json jsonp margin memcache mysql nodejs ps技巧 typescript void vpn vuejs wampserver webpack win10 XMLHttpRequest z-index 事件冒泡 事件绑定 内容发布时间 图片加载 大写 字符串 封装ajax 广告屏蔽 批量修改图层名称 水平垂直居中 注册码 特殊符号 百度 空元素 站长平台 网页快照 负边界 递减 随机数 首字母

友情链接

  • 蔡甸新闻网
©2025 Yuuk的博客 | 鄂ICP备13014750号-9