Defer schema validation to improve test performance
Many modules export an `ajvCompiledJsonSchemaValidator(...)`, which incurs the `ajv` schema compilation at module-import-time. Many tests depend on these modules transitively, but don't exercise the compiled schema - so, this compilation time is wasted. On my machine, with an example test (airbrake/src/index.test.ts) I'm seeing the following numbers (n=10): Before: 6005.1ms After: 5807.8ms Benefit: 197.3ms (~3.3%) Weirdly, the NodeJS profiler was saying that schema compilation was taking ~2000ms, but that is likely due to the inaccuracy of the sampling. Signed-off-by: Mitchell Hentges <mhentges@spotify.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/catalog-model': patch
|
||||
---
|
||||
|
||||
Defer `ajv` compilation of schema validators to improve module-import performance
|
||||
@@ -22,9 +22,12 @@ import { KindValidator } from './types';
|
||||
// exported kind validators have the `KindValidator` signature which is
|
||||
// different. So let's postpone that change until a later time.
|
||||
export function ajvCompiledJsonSchemaValidator(schema: unknown): KindValidator {
|
||||
const validator = entityKindSchemaValidator(schema);
|
||||
let validator: undefined | ((data: unknown) => any);
|
||||
return {
|
||||
async check(data) {
|
||||
if (!validator) {
|
||||
validator = entityKindSchemaValidator(schema);
|
||||
}
|
||||
return validator(data) === data;
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user