From 168e4e0fa04c7bfc2cd8d36d685b1bcff23b4d25 Mon Sep 17 00:00:00 2001 From: Timo Stamm Date: Mon, 4 Aug 2025 18:32:18 +0200 Subject: [PATCH] Optimize bundle-size impact of fix to closed enum parsing --- packages/bundle-size/README.md | 10 +++++----- packages/bundle-size/chart.svg | 12 ++++++------ packages/protobuf/src/from-binary.ts | 16 +++++++++------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/packages/bundle-size/README.md b/packages/bundle-size/README.md index 27fbec515..92d2b4088 100644 --- a/packages/bundle-size/README.md +++ b/packages/bundle-size/README.md @@ -16,11 +16,11 @@ usually do. We repeat this for an increasing number of files. | code generator | files | bundle size | minified | compressed | | ------------------- | ----: | ----------: | --------: | ---------: | -| Protobuf-ES | 1 | 132,088 b | 68,483 b | 15,718 b | -| Protobuf-ES | 4 | 134,277 b | 69,993 b | 16,450 b | -| Protobuf-ES | 8 | 137,039 b | 71,764 b | 16,974 b | -| Protobuf-ES | 16 | 147,489 b | 79,745 b | 19,317 b | -| Protobuf-ES | 32 | 175,280 b | 101,763 b | 24,760 b | +| Protobuf-ES | 1 | 132,159 b | 68,489 b | 15,756 b | +| Protobuf-ES | 4 | 134,348 b | 69,996 b | 16,428 b | +| Protobuf-ES | 8 | 137,110 b | 71,767 b | 16,932 b | +| Protobuf-ES | 16 | 147,560 b | 79,748 b | 19,320 b | +| Protobuf-ES | 32 | 175,351 b | 101,766 b | 24,771 b | | protobuf-javascript | 1 | 104,048 b | 70,320 b | 15,540 b | | protobuf-javascript | 4 | 130,537 b | 85,672 b | 16,956 b | | protobuf-javascript | 8 | 152,429 b | 98,044 b | 18,138 b | diff --git a/packages/bundle-size/chart.svg b/packages/bundle-size/chart.svg index c7f8de109..f6f6b7baf 100644 --- a/packages/bundle-size/chart.svg +++ b/packages/bundle-size/chart.svg @@ -43,14 +43,14 @@ 0 KiB - + Protobuf-ES -Protobuf-ES 15.35 KiB for 1 files -Protobuf-ES 16.06 KiB for 4 files -Protobuf-ES 16.58 KiB for 8 files -Protobuf-ES 18.86 KiB for 16 files -Protobuf-ES 24.18 KiB for 32 files +Protobuf-ES 15.39 KiB for 1 files +Protobuf-ES 16.04 KiB for 4 files +Protobuf-ES 16.54 KiB for 8 files +Protobuf-ES 18.87 KiB for 16 files +Protobuf-ES 24.19 KiB for 32 files diff --git a/packages/protobuf/src/from-binary.ts b/packages/protobuf/src/from-binary.ts index cdb54d284..c58068298 100644 --- a/packages/protobuf/src/from-binary.ts +++ b/packages/protobuf/src/from-binary.ts @@ -22,11 +22,8 @@ import type { import { scalarZeroValue } from "./reflect/scalar.js"; import type { ScalarValue } from "./reflect/scalar.js"; import { reflect } from "./reflect/reflect.js"; -import { - BinaryReader, - BinaryWriter, - WireType, -} from "./wire/binary-encoding.js"; +import { BinaryReader, WireType } from "./wire/binary-encoding.js"; +import { varint32write } from "./wire/varint.js"; /** * Options for parsing binary data. @@ -163,9 +160,14 @@ export function readField( if (ok) { message.set(field, val); } else if (options.readUnknownFields) { - const data = new BinaryWriter().int32(val as number).finish(); + const bytes: number[] = []; + varint32write(val as number, bytes); const unknownFields = message.getUnknown() ?? []; - unknownFields.push({ no: field.number, wireType, data }); + unknownFields.push({ + no: field.number, + wireType, + data: new Uint8Array(bytes), + }); message.setUnknown(unknownFields); } }