Open yanlele opened 3 weeks ago
关键词:请求耗时统计
在前端业务中,可以通过以下几种方法统计请求耗时:
一、使用fetch结合时间戳
fetch
const startTime = performance.now();
fetch('your-api-url')
.then()
.catch()
.then(response => { const endTime = performance.now(); const duration = endTime - startTime; console.log(`Request took ${duration} milliseconds.`); return response; }) .catch(error => { const endTime = performance.now(); const duration = endTime - startTime; console.log(`Request took ${duration} milliseconds with error: ${error}`); });
二、使用XMLHttpRequest结合时间戳
XMLHttpRequest
const xhr = new XMLHttpRequest(); const startTime = performance.now();
xhr.open('GET', 'your-api-url'); xhr.send();
onload
onerror
xhr.onload = function () { const endTime = performance.now(); const duration = endTime - startTime; console.log(`Request took ${duration} milliseconds.`); }; xhr.onerror = function () { const endTime = performance.now(); const duration = endTime - startTime; console.log(`Request took ${duration} milliseconds with error.`); };
三、利用拦截器(axios)
axios
axios.interceptors.request.use((config) => { config.startTime = performance.now(); return config; }); axios.interceptors.response.use( (response) => { const endTime = performance.now(); const duration = endTime - response.config.startTime; console.log(`Request to ${response.config.url} took ${duration} milliseconds.`); return response; }, (error) => { const endTime = performance.now(); const duration = endTime - error.config.startTime; console.log(`Request to ${error.config.url} took ${duration} milliseconds with error.`); return Promise.reject(error); } );
总结
上面都属于一些初级手段,因为还是在浏览器进程里面, 一旦出现长任务阻塞了浏览器, 这个统计就不太准确了。
Performance API 可以用来统计请求耗时。
Performance API 提供了一系列的性能测量工具,可以测量网页加载和运行过程中的各种性能指标。其中,可以通过以下方式来统计网络请求的耗时:
使用performance.timing:
performance.timing
responseEnd
requestStart
使用performance.getEntriesByType('resource'):
performance.getEntriesByType('resource')
startTime
以下是一个示例代码:
// 计算页面加载过程中第一个请求的耗时 const timing = performance.timing; const requestDuration = timing.responseEnd - timing.requestStart; console.log(`First request took ${requestDuration} milliseconds.`); // 遍历所有资源加载条目,找到特定请求并计算耗时 const resources = performance.getEntriesByType("resource"); for (const resource of resources) { if (resource.name === "https://example.com/specific-resource") { const resourceDuration = resource.responseEnd - resource.startTime; console.log(`Specific resource request took ${resourceDuration} milliseconds.`); break; } }
Web Worker 可以用于统计请求耗时。
以下是一种使用 Web Worker 统计请求耗时的方法:
worker.js
self.onmessage = function (event) { const url = event.data.url; const startTime = performance.now(); fetch(url) .then((response) => { const endTime = performance.now(); const duration = endTime - startTime; self.postMessage({ duration }); }) .catch((error) => { self.postMessage({ error: `Error fetching ${url}: ${error}` }); }); };
const worker = new Worker("worker.js"); const url = "your-api-url"; worker.postMessage({ url }); worker.onmessage = function (event) { if (event.data.duration) { console.log(`Request to ${url} took ${event.data.duration} milliseconds.`); } else { console.error(event.data.error); } };
在这个例子中,Web Worker 负责发送请求并计算耗时,然后将结果发送回主页面。这样可以在不阻塞主页面 UI 线程的情况下进行请求耗时统计。
关键词:请求耗时统计
在前端业务中,可以通过以下几种方法统计请求耗时:
初级手段
一、使用
fetch
结合时间戳const startTime = performance.now();
fetch
发送请求:fetch('your-api-url')
.then()
或.catch()
中记录结束时间戳并计算耗时:二、使用
XMLHttpRequest
结合时间戳XMLHttpRequest
对象并记录开始时间:xhr.open('GET', 'your-api-url'); xhr.send();
onload
、onerror
等事件处理函数中记录结束时间并计算耗时:三、利用拦截器(
axios
)axios
或类似的库,可以设置请求拦截器和响应拦截器:总结
上面都属于一些初级手段,因为还是在浏览器进程里面, 一旦出现长任务阻塞了浏览器, 这个统计就不太准确了。
进阶手段 - Performance API
Performance API 可以用来统计请求耗时。
Performance API 提供了一系列的性能测量工具,可以测量网页加载和运行过程中的各种性能指标。其中,可以通过以下方式来统计网络请求的耗时:
使用
performance.timing
:performance.timing
对象包含了网页加载过程中的各个时间点信息。可以通过计算不同时间点之间的差值来得到特定阶段的耗时。responseEnd
(服务器响应结束的时间)和requestStart
(开始请求的时间)之间的差值来得到请求的耗时。使用
performance.getEntriesByType('resource')
:startTime
(开始时间)和responseEnd
(响应结束时间)等属性,从而计算出资源加载的耗时。以下是一个示例代码:
高级手段 - Web Worker
Web Worker 可以用于统计请求耗时。
以下是一种使用 Web Worker 统计请求耗时的方法:
worker.js
:在这个例子中,Web Worker 负责发送请求并计算耗时,然后将结果发送回主页面。这样可以在不阻塞主页面 UI 线程的情况下进行请求耗时统计。