Skip to content

Commit f9faf32

Browse files
committed
perf(json-type): ⚡️ precompile "map" inner capacity estimator codegen
1 parent 65b01d7 commit f9faf32

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/json-type/type/classes.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,6 @@ export class ArrayType<T extends Type> extends AbstractType<schema.ArraySchema<S
11431143
const rLen = codegen.var(`${value.use()}.length`);
11441144
const type = this.type;
11451145
codegen.js(`size += ${MaxEncodingOverhead.ArrayElement} * ${rLen}`);
1146-
// TODO: Use ".capacityEstimator()" here.
11471146
const fn = type.compileCapacityEstimator({
11481147
system: ctx.options.system,
11491148
name: ctx.options.name,
@@ -2008,13 +2007,19 @@ export class MapType<T extends Type> extends AbstractType<schema.MapSchema<Schem
20082007
const rKey = codegen.var();
20092008
const rLen = codegen.var(`${rKeys}.length`);
20102009
codegen.js(`size += ${MaxEncodingOverhead.ObjectElement} * ${rLen}`);
2010+
const type = this.type;
2011+
const fn = type.compileCapacityEstimator({
2012+
system: ctx.options.system,
2013+
name: ctx.options.name,
2014+
});
2015+
const rFn = codegen.linkDependency(fn);
20112016
const ri = codegen.var('0');
20122017
codegen.js(`for (; ${ri} < ${rLen}; ${ri}++) {`);
20132018
codegen.js(`${rKey} = ${rKeys}[${ri}];`);
20142019
codegen.js(
20152020
`size += ${MaxEncodingOverhead.String} + ${MaxEncodingOverhead.StringLengthMultiplier} * ${rKey}.length;`,
20162021
);
2017-
this.type.codegenCapacityEstimator(ctx, new JsExpression(() => `${r}[${rKey}]`));
2022+
codegen.js(`size += ${rFn}(${r}[${rKey}]);`);
20182023
codegen.js(`}`);
20192024
}
20202025

0 commit comments

Comments
 (0)