public getPerfTiming()

in src/performance/perf.ts [19:63]


  public getPerfTiming(): IPerfDetail {
    try {
      let { timing } = window.performance as PerformanceNavigationTiming | any; // PerformanceTiming
      if (typeof window.PerformanceNavigationTiming === 'function') {
        const nt2Timing = performance.getEntriesByType('navigation')[0];

        if (nt2Timing) {
          timing = nt2Timing;
        }
      }
      let redirectTime = 0;

      if (timing.navigationStart !== undefined) {
        redirectTime = parseInt(String(timing.fetchStart - timing.navigationStart), 10);
      } else if (timing.redirectEnd !== undefined) {
        redirectTime = parseInt(String(timing.redirectEnd - timing.redirectStart), 10);
      } else {
        redirectTime = 0;
      }

      return {
        redirectTime,
        dnsTime: parseInt(String(timing.domainLookupEnd - timing.domainLookupStart), 10),
        ttfbTime: parseInt(String(timing.responseStart - timing.requestStart), 10), // Time to First Byte
        tcpTime: parseInt(String(timing.connectEnd - timing.connectStart), 10),
        transTime: parseInt(String(timing.responseEnd - timing.responseStart), 10),
        domAnalysisTime: parseInt(String(timing.domInteractive - timing.responseEnd), 10),
        fptTime: parseInt(String(timing.responseEnd - timing.fetchStart), 10), // First Paint Time or Blank Screen Time
        domReadyTime: parseInt(String(timing.domContentLoadedEventEnd - timing.fetchStart), 10),
        loadPageTime: parseInt(String(timing.loadEventStart - timing.fetchStart), 10), // Page full load time
        // Synchronous load resources in the page
        resTime: parseInt(String(timing.loadEventStart - timing.domContentLoadedEventEnd), 10),
        // Only valid for HTTPS
        sslTime:
          location.protocol === 'https:' && timing.secureConnectionStart > 0
            ? parseInt(String(timing.connectEnd - timing.secureConnectionStart), 10)
            : undefined,
        ttlTime: parseInt(String(timing.domInteractive - timing.fetchStart), 10), // time to interact
        firstPackTime: parseInt(String(timing.responseStart - timing.domainLookupStart), 10), // first pack time
        fmpTime: 0, // First Meaningful Paint
      };
    } catch (e) {
      throw e;
    }
  }