11import  {  isServer  }  from  "./postprocess/misc" ; 
22import  *  as  SPAs  from  "../../config/spa.config" ; 
3+ import  logger  from  "./logger" ; 
4+ 
5+ //#region SEO 
36
47const  regexPath1Literal  =  `/${ SPAs . getRedirectName ( ) }  (.html)?$` ; 
58const  regexPath1  =  new  RegExp ( regexPath1Literal ,  "i" ) ; 
@@ -20,3 +23,39 @@ export const getTitle = (pageTitle?: string): string => {
2023  const  ret  =  ! ! pageTitle ? `${ SPAs . appTitle }   - ${ pageTitle }  `  : SPAs . appTitle ; 
2124  return  ret  +  ( CF_PAGES ? " (Jamstack build)"  : " (Full stack build)" ) ; 
2225} 
26+ 
27+ //#endregion 
28+ 
29+ //#region Performance Benchmarking 
30+ 
31+ const  perfLiterals  =  [ "fetch" ,  "click" ,  "end" ,  "measure" ,  "mark" ] ; 
32+ 
33+ export  const  perfStart  =  ( name : "click" | "fetch" )  =>  { 
34+   const  perf  =  window ?. performance ; 
35+   perf ?. mark ( name ) ; 
36+ } 
37+ 
38+ export  const  perfEnd  =  ( ) : undefined | number  =>  { 
39+   if  ( typeof ( window ?. performance ?. getEntriesByName )  !==  "function" )  { 
40+     return  undefined ; 
41+   } 
42+ 
43+   const  perf  =  window . performance ; 
44+   const  fetchEntries  =  perf . getEntriesByName ( perfLiterals [ 0 ] ,  perfLiterals [ 4 ] ) ; 
45+   const  clickEntries  =  perf . getEntriesByName ( perfLiterals [ 1 ] ,  perfLiterals [ 4 ] ) ; 
46+   const  clickEntriesLen  =  Math . min ( ...[ clickEntries . length ,  1 ] ) ; 
47+ 
48+   if  ( clickEntriesLen  ===  0  &&  fetchEntries . length  ===  0 )  { 
49+     return  undefined ; 
50+   } 
51+ 
52+   perf . mark ( perfLiterals [ 2 ] ) ; 
53+   perf . measure ( perfLiterals [ 3 ] ,  perfLiterals [ clickEntriesLen ] ,  perfLiterals [ 2 ] ) ; 
54+   const  duration  =  performance . getEntriesByType ( perfLiterals [ 3 ] ) [ 0 ] . duration ; 
55+   logger . info ( `${ clickEntriesLen  ===  0 ? "Updating"  : "Transition to" }   internal SPA page ${ clickEntriesLen  ===  0 ? "after fetch " : "" }  took ${ Math . round ( duration ) }   msec` ) ; 
56+   perf . clearMarks ( ) ; 
57+   perf . clearMeasures ( ) ; 
58+   return  duration ; 
59+ } 
60+ 
61+ //#endregion 
0 commit comments