@@ -94,73 +94,105 @@ const StateRoute = (props: StateRouteProps) => {
94
94
let CLSColor : String ;
95
95
let INPColor : String ;
96
96
97
- // adjust the strings that represent colors of the webmetrics performance bar for 'Largest Contentful Paint (LCP)', 'First Input Delay (FID)', 'First Contentfuly Paint (FCP)', and 'Time to First Byte (TTFB)' based on webMetrics outputs.
98
- if ( webMetrics . LCP <= 2000 ) LCPColor = '#0bce6b' ;
99
- if ( webMetrics . LCP > 2000 && webMetrics . LCP < 4000 ) LCPColor = '#E56543 ' ;
97
+ // adjust the strings that represent colors of the webmetrics performance bar for 'Largest Contentful Paint (LCP)', 'First Input Delay (FID)', 'First Contentfuly Paint (FCP)', 'Time to First Byte (TTFB)', 'Cumulative Layout Shift (CLS)', and 'Interaction to Next Paint (INP )' based on webMetrics outputs.
98
+ if ( webMetrics . LCP <= 2500 ) LCPColor = '#0bce6b' ;
99
+ if ( webMetrics . LCP > 2500 && webMetrics . LCP <= 4000 ) LCPColor = '#fc5a03 ' ;
100
100
if ( webMetrics . LCP > 4000 ) LCPColor = '#fc2000' ;
101
+
101
102
if ( webMetrics . FID <= 100 ) FIDColor = '#0bce6b' ;
102
103
if ( webMetrics . FID > 100 && webMetrics . FID <= 300 ) FIDColor = '#fc5a03' ;
103
104
if ( webMetrics . FID > 300 ) FIDColor = '#fc2000' ;
104
- if ( webMetrics . FCP <= 900 ) FCPColor = '#0bce6b' ;
105
- if ( webMetrics . FCP > 900 && webMetrics . FCP <= 1100 ) FCPColor = '#fc5a03' ;
106
- if ( webMetrics . FCP > 1100 ) FCPColor = '#fc2000' ;
107
- if ( webMetrics . TTFB <= 600 ) TTFBColor = '#0bce6b' ;
108
- if ( webMetrics . TTFB > 600 ) TTFBColor = '#fc2000' ;
105
+
106
+ if ( webMetrics . FCP <= 1800 ) FCPColor = '#0bce6b' ;
107
+ if ( webMetrics . FCP > 1800 && webMetrics . FCP <= 3000 ) FCPColor = '#fc5a03' ;
108
+ if ( webMetrics . FCP > 3000 ) FCPColor = '#fc2000' ;
109
+
110
+ if ( webMetrics . TTFB <= 800 ) TTFBColor = '#0bce6b' ;
111
+ if ( webMetrics . TTFB > 800 && webMetrics . TTFB <= 1800 ) TTFBColor = '#fc5a03' ;
112
+ if ( webMetrics . TTFB > 1800 ) TTFBColor = '#fc2000' ;
113
+
109
114
if ( webMetrics . CLS <= 0.1 ) CLSColor = '#0bce6b' ;
110
- if ( webMetrics . CLS > 0.1 && webMetrics . CLS <= 0.25 ) CLSColor = '#E56543 ' ;
115
+ if ( webMetrics . CLS > 0.1 && webMetrics . CLS <= 0.25 ) CLSColor = '#fc5a03 ' ;
111
116
if ( webMetrics . CLS > 0.25 ) CLSColor = '#fc2000' ;
117
+
112
118
if ( webMetrics . INP <= 200 ) INPColor = '#0bce6b' ;
113
- if ( webMetrics . INP <= 500 ) INPColor = '#E56543 ' ;
119
+ if ( webMetrics . INP > 200 && webMetrics . INP <= 500 ) INPColor = '#fc5a03 ' ;
114
120
if ( webMetrics . INP > 500 ) INPColor = '#fc2000' ;
115
121
116
122
return (
117
123
< div className = 'web-metrics-container' >
118
124
< WebMetrics
119
125
color = { LCPColor }
120
- series = { ( webMetrics . LCP / 2500 ) * 100 }
121
- formatted = { ( val ) =>
122
- Number . isNaN ( val ) ? '- ms' : `${ ( ( val / 100 ) * 2500 ) . toFixed ( 2 ) } ms`
126
+ series = { webMetrics . LCP ? [ webMetrics . LCP / 70 < 100 ? webMetrics . LCP / 70 : 100 ] : 0 }
127
+ formatted = { ( _ ) =>
128
+ typeof webMetrics . LCP !== 'number' ? '- ms' : `${ webMetrics . LCP . toFixed ( 2 ) } ms`
123
129
}
130
+ score = { [ '2500 ms' , '4000 ms' ] }
131
+ overLimit = { webMetrics . LCP > 7000 }
124
132
label = 'Largest Contentful Paint'
125
133
name = 'Largest Contentful Paint'
126
- description = 'Measures loading performance. The benchmark is less than 2500 ms. '
134
+ description = 'Measures loading performance.'
127
135
/>
128
136
< WebMetrics
129
137
color = { FIDColor }
130
- series = { webMetrics . FID * 25 }
131
- formatted = { ( val ) => ( Number . isNaN ( val ) ? '- ms' : `${ ( val / 25 ) . toFixed ( 2 ) } ms` ) }
138
+ series = { webMetrics . FID ? [ webMetrics . FID / 5 < 100 ? webMetrics . FID / 5 : 100 ] : 0 }
139
+ formatted = { ( _ ) =>
140
+ typeof webMetrics . FID !== 'number' ? '- ms' : `${ webMetrics . FID . toFixed ( 2 ) } ms`
141
+ }
142
+ score = { [ '100 ms' , '300 ms' ] }
143
+ overLimit = { webMetrics . FID > 500 }
132
144
label = 'First Input Delay'
133
145
name = 'First Input Delay'
134
- description = 'Measures interactivity. The benchmark is less than 100 ms. '
146
+ description = 'Measures interactivity.'
135
147
/>
136
148
< WebMetrics
137
149
color = { FCPColor }
138
- series = { ( webMetrics . FCP / 1000 ) * 100 }
139
- formatted = { ( val ) => `${ ( ( val / 100 ) * 1000 ) . toFixed ( 2 ) } ms` }
150
+ series = { webMetrics . FCP ? [ webMetrics . FCP / 50 < 100 ? webMetrics . FCP / 50 : 100 ] : 0 }
151
+ formatted = { ( _ ) =>
152
+ typeof webMetrics . FCP !== 'number' ? '- ms' : `${ webMetrics . FCP . toFixed ( 2 ) } ms`
153
+ }
154
+ score = { [ '1800 ms' , '3000 ms' ] }
155
+ overLimit = { webMetrics . FCP > 5000 }
140
156
label = 'First Contentful Paint'
141
157
name = 'First Contentful Paint'
142
- description = 'Measures the time it takes the browser to render the first piece of DOM content. No benchmark. '
158
+ description = 'Measures the time it takes the browser to render the first piece of DOM content.'
143
159
/>
144
160
< WebMetrics
145
161
color = { TTFBColor }
146
- series = { ( webMetrics . TTFB / 10 ) * 100 }
147
- formatted = { ( val ) => `${ ( ( val / 100 ) * 10 ) . toFixed ( 2 ) } ms` }
162
+ series = { webMetrics . TTFB ? [ webMetrics . TTFB / 30 < 100 ? webMetrics . TTFB / 30 : 100 ] : 0 }
163
+ formatted = { ( _ ) =>
164
+ typeof webMetrics . TTFB !== 'number' ? '- ms' : `${ webMetrics . TTFB . toFixed ( 2 ) } ms`
165
+ }
166
+ score = { [ '800 ms' , '1800 ms' ] }
167
+ overLimit = { webMetrics . TTFB > 3000 }
148
168
label = 'Time To First Byte'
149
169
name = 'Time to First Byte'
150
- description = 'Measures the time it takes for a browser to receive the first byte of page content. The benchmark is 600 ms. '
170
+ description = 'Measures the time it takes for a browser to receive the first byte of page content.'
151
171
/>
152
172
< WebMetrics
153
173
color = { CLSColor }
154
- series = { webMetrics . CLS * 10 }
155
- formatted = { ( val ) => `CLS Score: ${ ( Number . isNaN ( val ) ? 'N/A' : `${ val / 10 < 0.01 ? 0 : ( val / 10 ) . toFixed ( 2 ) } ` ) } ` }
174
+ series = { webMetrics . CLS ? [ webMetrics . CLS * 200 < 100 ? webMetrics . CLS * 200 : 100 ] : 0 }
175
+ formatted = { ( _ ) =>
176
+ `CLS Score: ${
177
+ typeof webMetrics . CLS !== 'number'
178
+ ? 'N/A'
179
+ : `${ webMetrics . CLS < 0.01 ? '~0' : webMetrics . CLS . toFixed ( 2 ) } `
180
+ } `
181
+ }
182
+ score = { [ '0.1' , '0.25' ] }
183
+ overLimit = { webMetrics . CLS > 0.5 }
156
184
label = 'Cumulative Layout Shift'
157
185
name = 'Cumulative Layout Shift'
158
186
description = { `Quantifies the visual stability of a web page by measuring layout shifts during the application's loading and interaction.` }
159
187
/>
160
188
< WebMetrics
161
189
color = { INPColor }
162
- series = { ( webMetrics . INP / 10 ) * 100 }
163
- formatted = { ( val ) => `INP Value: ${ ( Number . isNaN ( val ) ? 'N/A' : `${ val / 10 } ` ) } ` }
190
+ series = { webMetrics . INP ? [ webMetrics . INP / 7 < 100 ? webMetrics . INP / 7 : 100 ] : 0 }
191
+ formatted = { ( _ ) =>
192
+ typeof webMetrics . INP !== 'number' ? '- ms' : `${ webMetrics . INP . toFixed ( 2 ) } ms`
193
+ }
194
+ score = { [ '200 ms' , '500 ms' ] }
195
+ overLimit = { webMetrics . LCP > 700 }
164
196
label = 'Interaction to Next Paint'
165
197
name = 'Interaction to Next Paint'
166
198
description = { `Assesses a page's overall responsiveness to user interactions by observing the latency of all click, tap, and keyboard interactions that occur throughout the lifespan of a user's visit to a page` }
0 commit comments