如果你想在使用 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)
})
如果没有后端配合,request 携带的 header 这个 X-Request-Id 不会被保持到 response 里的