[英]Get API response time using performance.now() in Service Worker
I am developing a react application and intercepting every fetch request using a service worker in place.我正在开发一个反应应用程序并使用服务工作者拦截每个获取请求。 I need to get the API response time what we normally do using performance.now() using service worker as if I am adding eventListener on its fetch method, it can intercept every fetch request.我需要得到 API 响应时间,就像我们通常使用 service worker 使用performance.now()所做的那样,就好像我在它的 fetch 方法上添加了 eventListener,它可以拦截每个 fetch 请求。
I am not sure exactly how to achieve this and where to place performance.now() start and end calls?我不确定如何实现这一点以及在哪里放置performance.now()开始和结束调用?
Below is the code I have worked so far.下面是我到目前为止工作的代码。
registerServiceWorker function - The function is womring fine and sw.js registers itself as service worker. registerServiceWorker function - function 运行良好,sw.js 将自己注册为服务工作者。
const registerServiceWorker = () => {
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js').then(registration => {
console.log('Service worker registered with scope: ', registration.scope);
}, (err) => {
console.log('ServiceWorker registration failed: ', err);
});
});
} else {
console.log('Service worker is not supported!');
};
};
sw.js file - Service worker file sw.js 文件- 服务工作者文件
self.addEventListener('fetch', event => {
const apiStartTime = self.performance.now();
event.respondWith((async () => {
const { pathname, query } = new URL(event.request.url);
const apiTotalTime = Math.round(self.performance.now() - apiStartTime);
console.log('performance2 end', event.request.url, apiTotalTime);
const cachedResponse = await caches.match(event.request);
if (cachedResponse) return cachedResponse;
const response = await fetch(event.request);
return response;
})());
});
The apiTotalTime value is coming as 0 always for every API which is not as expected.每个 API 的 apiTotalTime 值始终为 0,这与预期不同。
Try placing your second call to performance.now
after await fetch(event.request)
- after the service call is actually made and awaited.尝试在await fetch(event.request)
之后对performance.now
进行第二次调用 - 在实际进行并等待服务调用之后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.