File tree Expand file tree Collapse file tree 2 files changed +19
-8
lines changed Expand file tree Collapse file tree 2 files changed +19
-8
lines changed Original file line number Diff line number Diff line change @@ -27,12 +27,11 @@ const result = await collector.execute({
27
27
async shouldAccept ( results : Metrics [ ] ) : Promise < boolean > {
28
28
const stats = new MetricsStats ( results ) ;
29
29
return true
30
- && checkStdDev ( stats , 'lcp' , MetricsStats . lcp , 10 )
31
- && checkStdDev ( stats , 'cls' , MetricsStats . cls , 10 )
30
+ && checkStdDev ( stats , 'lcp' , MetricsStats . lcp , 30 )
31
+ && checkStdDev ( stats , 'cls' , MetricsStats . cls , 0.1 )
32
32
&& checkStdDev ( stats , 'cpu' , MetricsStats . cpu , 10 )
33
- && checkStdDev ( stats , 'memory-mean' , MetricsStats . memoryMean , 10000 )
34
- && checkStdDev ( stats , 'memory-max' , MetricsStats . memoryMax , 10000 ) ;
35
- ;
33
+ && checkStdDev ( stats , 'memory-mean' , MetricsStats . memoryMean , 30 * 1024 )
34
+ && checkStdDev ( stats , 'memory-max' , MetricsStats . memoryMax , 100 * 1024 ) ;
36
35
} ,
37
36
} ) ;
38
37
Original file line number Diff line number Diff line change @@ -14,17 +14,29 @@ export class MetricsStats {
14
14
static memoryMax : NumberProvider = metrics => ss . max ( Array . from ( metrics . memory . snapshots . values ( ) ) ) ;
15
15
16
16
public mean ( dataProvider : NumberProvider ) : number | undefined {
17
- const numbers = this . _items . map ( dataProvider ) ;
17
+ const numbers = this . _filteredValues ( dataProvider ) ;
18
18
return numbers . length > 0 ? ss . mean ( numbers ) : undefined ;
19
19
}
20
20
21
21
public max ( dataProvider : NumberProvider ) : number | undefined {
22
- const numbers = this . _items . map ( dataProvider ) ;
22
+ const numbers = this . _filteredValues ( dataProvider ) ;
23
23
return numbers . length > 0 ? ss . max ( numbers ) : undefined ;
24
24
}
25
25
26
26
public stddev ( dataProvider : NumberProvider ) : number | undefined {
27
- const numbers = this . _items . map ( dataProvider ) ;
27
+ const numbers = this . _filteredValues ( dataProvider ) ;
28
28
return numbers . length > 0 ? ss . standardDeviation ( numbers ) : undefined ;
29
29
}
30
+
31
+ // See https://en.wikipedia.org/wiki/Interquartile_range#Outliers for details on filtering.
32
+ private _filteredValues ( dataProvider : NumberProvider ) : number [ ] {
33
+ const numbers = this . _items . map ( dataProvider ) ;
34
+ numbers . sort ( ( a , b ) => a - b )
35
+
36
+ const q1 = ss . quantileSorted ( numbers , 0.25 ) ;
37
+ const q3 = ss . quantileSorted ( numbers , 0.75 ) ;
38
+ const iqr = q3 - q1
39
+
40
+ return numbers . filter ( num => num >= ( q1 - 1.5 * iqr ) && num <= ( q3 + 1.5 * iqr ) )
41
+ }
30
42
}
You can’t perform that action at this time.
0 commit comments