简体   繁体   English

在 Service Worker 中使用 performance.now() 获取 API 响应时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM