This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-client-js.git

commit 87cbbd2e9477d8fbb0624b01ea25b1a3e9b4db7c
Author: Qiuxia Fan <[email protected]>
AuthorDate: Tue Aug 4 17:31:57 2020 +0800

    feat: update perf metrics
---
 src/performance/perf.ts | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/performance/perf.ts b/src/performance/perf.ts
index 5943e8b..0ea7c84 100644
--- a/src/performance/perf.ts
+++ b/src/performance/perf.ts
@@ -26,7 +26,7 @@ class PagePerf {
       }
       const { timing } = window.performance;
       const loadTime = timing.loadEventEnd - timing.loadEventStart;
-      const navigationStart = timing.navigationStart;
+      let redirectTime = 0;
 
       if (loadTime < 0) {
         setTimeout(() => {
@@ -35,18 +35,30 @@ class PagePerf {
         return;
       }
 
+      if (timing.navigationStart !== undefined) {
+        redirectTime = timing.fetchStart - timing.navigationStart;
+      } else if (timing.redirectEnd !== undefined) {
+        redirectTime = timing.redirectEnd - timing.redirectStart;
+      } else {
+        redirectTime = 0;
+      }
+
       return {
-        redirectTime: timing.redirectEnd - timing.redirectStart,
+        redirectTime,
         dnsTime: timing.domainLookupEnd - timing.domainLookupStart,
-        ttfbTime: timing.responseStart - navigationStart,
-        appcacheTime: timing.domainLookupStart - timing.fetchStart,
-        unloadTime: timing.unloadEventEnd - timing.unloadEventStart,
+        ttfbTime: timing.responseStart - timing.requestStart, // Time to First 
Byte
+        // appcacheTime: timing.domainLookupStart - timing.fetchStart,
+        // unloadTime: timing.unloadEventEnd - timing.unloadEventStart,
         tcpTime: timing.connectEnd - timing.connectStart,
-        reqTime: timing.responseEnd - timing.responseStart,
-        analysisTime: timing.domComplete - timing.domInteractive,
-        blankTime: timing.domLoading - navigationStart,
-        domReadyTime: timing.domContentLoadedEventEnd - navigationStart,
-        loadPage: timing.loadEventEnd - navigationStart,
+        transTime: timing.responseEnd - timing.responseStart,
+        domAnalysisTime: timing.domInteractive - timing.responseEnd,
+        fptTime: timing.responseEnd - timing.fetchStart, // First Paint Time 
or Blank Screen Time
+        domReadyTime: timing.domContentLoadedEventEnd - timing.fetchStart,
+        loadPage: timing.loadEventStart - timing.fetchStart, // Page full load 
time
+        resTime: timing.loadEventStart - timing.domContentLoadedEventEnd, // 
Synchronous load resources in the page
+        sslTime: timing.connectEnd - timing.secureConnectionStart, // Only 
valid for HTTPS
+        ttlTime: timing.domInteractive - timing.fetchStart, // time to interact
+        firstPackTime: timing.responseStart - timing.domainLookupStart, // 
first pack time
       };
     } catch (e) {
       throw e;

Reply via email to