Skip to content

Commit aaaaf82

Browse files
committed
perf(serdes): short-circuit uninitialized serializer
1 parent 8ade957 commit aaaaf82

File tree

2 files changed

+36
-16
lines changed

2 files changed

+36
-16
lines changed

packages/qwik/src/core/shared/serdes/serdes.unit.ts

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -569,18 +569,28 @@ describe('shared-serialization', () => {
569569
const unread = createSerializer$({
570570
deserialize: (n?: number) => new MyCustomSerializable(n || 3),
571571
serialize: (obj) => obj.n,
572+
initial: 7,
572573
});
573574
const thunked = createSerializer$(() => ({
574575
deserialize: (n?: number) => new MyCustomSerializable(n || 3),
575576
serialize: (obj) => obj.n,
576577
}));
578+
thunked.value.inc();
577579
const promised = createSerializer$(() => ({
578580
deserialize: (n?: number) => new MyCustomSerializable(n || 3),
579581
serialize: (obj) => obj.n,
580582
})) as any as SerializerSignalImpl<number, MyCustomSerializable>;
583+
promised.value.inc();
584+
// Fake promise
581585
promised.$computeQrl$.resolved = Promise.resolve(promised.$computeQrl$.resolved) as any;
586+
const unreadPromise = createSerializer$({
587+
deserialize: (n?: number) => new MyCustomSerializable(n || 3),
588+
serialize: (obj) => obj.n,
589+
initial: 7,
590+
}) as any as SerializerSignalImpl<number, MyCustomSerializable>;
591+
unreadPromise.$computeQrl$.resolved = Promise.resolve(promised.$computeQrl$.resolved) as any;
582592

583-
const objs = await serialize([plain, unread, thunked, promised]);
593+
const objs = await serialize([plain, unread, thunked, promised, unreadPromise]);
584594
expect(_dumpState(objs)).toMatchInlineSnapshot(`
585595
"
586596
0 Array [
@@ -597,28 +607,35 @@ describe('shared-serialization', () => {
597607
SerializerSignal [
598608
RootRef 3
599609
Constant undefined
600-
Constant NEEDS_COMPUTATION
610+
{number} 4
601611
]
602612
ForwardRef 0
613+
SerializerSignal [
614+
RootRef 5
615+
Constant undefined
616+
Constant NEEDS_COMPUTATION
617+
]
603618
]
604-
1 PreloadQRL "5 6"
605-
2 PreloadQRL "5 7"
606-
3 PreloadQRL "5 8"
607-
4 PreloadQRL "5 9"
608-
5 {string} "mock-chunk"
609-
6 {string} "describe_describe_it_plain_createSerializer_IrZN04alftE"
610-
7 {string} "describe_describe_it_unread_createSerializer_oYdaCRjw9Q0"
611-
8 {string} "describe_describe_it_thunked_createSerializer_ufw7hr9vFDo"
612-
9 {string} "describe_describe_it_promised_createSerializer_YCkDOYPyCO0"
613-
10 SerializerSignal [
619+
1 PreloadQRL "6 7"
620+
2 PreloadQRL "6 8"
621+
3 PreloadQRL "6 9"
622+
4 PreloadQRL "6 10"
623+
5 PreloadQRL "6 11"
624+
6 {string} "mock-chunk"
625+
7 {string} "describe_describe_it_plain_createSerializer_IrZN04alftE"
626+
8 {string} "describe_describe_it_unread_createSerializer_oYdaCRjw9Q0"
627+
9 {string} "describe_describe_it_thunked_createSerializer_ufw7hr9vFDo"
628+
10 {string} "describe_describe_it_promised_createSerializer_YCkDOYPyCO0"
629+
11 {string} "describe_describe_it_unreadPromise_createSerializer_8vLYtMSnQio"
630+
12 SerializerSignal [
614631
RootRef 4
615632
Constant undefined
616-
Constant NEEDS_COMPUTATION
633+
{number} 4
617634
]
618-
11 ForwardRefs [
619-
10
635+
13 ForwardRefs [
636+
12
620637
]
621-
(382 chars)"
638+
(478 chars)"
622639
`);
623640
});
624641
it(title(TypeIds.AsyncComputedSignal), async () => {

packages/qwik/src/core/shared/serdes/serialize.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,9 @@ export class PromiseResult {
687687
) {}
688688
}
689689
function getCustomSerializerPromise<T, S>(signal: SerializerSignalImpl<T, S>, value: any) {
690+
if (value === NEEDS_COMPUTATION) {
691+
return value;
692+
}
690693
return maybeThen(
691694
(signal.$computeQrl$.resolved || signal.$computeQrl$.resolve()) as any as SerializerArg<
692695
unknown,

0 commit comments

Comments
 (0)