Zum Inhalt springen
Deutsch

JSON-Serializer

JsonSerializer ist der Default-Serializer. Standard-JSON über JSON.stringify + JSON.parse; Bytes sind UTF-8.

import { JsonSerializer } from 'actor-ts';
const serializer = new JsonSerializer();
const bytes = serializer.toBinary({ kind: 'inc', n: 1 });
// → Uint8Array von '{"kind":"inc","n":1}' als UTF-8
const decoded = serializer.fromBinary(bytes, '');
// → { kind: 'inc', n: 1 }
  • Universell — jede Sprache hat einen JSON-Parser.
  • Menschenlesbar — öffne eine Journal-Datei mit cat; sieh die Events.
  • Schema-flexibel — kein Compile-Schritt; Typen entwickeln sich durch ganz normale Code-Änderungen weiter (+ Schema- Migrations-Adapter).
  • Kampferprobt — jede Web-API spricht JSON.

Für die meisten Apps wirst du nie Serializer wechseln — JSON deckt es ab.

  • Plain-Objekte, Arrays.
  • Strings, Zahlen, Booleans, null.
  • Verschachtelte Kombinationen.

Was verworfen oder transformiert wird:

TypVerhalten
undefinedAus Objekten / Arrays verworfen.
DateÜber toISOString() stringified; geht als String durch den Round-Trip.
Map / SetAls leeres {} serialisiert.
BigIntWirft TypeError.
FunctionVerworfen (in Objekten); Arrays werden zu null.
SymbolVerworfen.
KlasseninstanzenAls plain { ...fields } serialisiert; Methoden verloren.

Für die meisten Actor-Nachrichten ist das okay — die Message-Konventionen des Frameworks raten ohnehin von nicht serialisierbaren Formen ab.

JSON ist größer als Binärformate für dieselben Daten:

  • Zahlen sind Dezimal-Strings ("42" sind 4 Bytes vs. 2 bei CBOR).
  • Feldnamen wiederholen sich (jeder Record hat "kind":"...").
  • Binärdaten (Uint8Array) werden base64-kodiert (33 % Overhead).

Für textlastige oder sich wiederholende Daten ist JSONs Overhead klein. Für binärlastige Daten (Bilder, kodierte Payloads) spart CBOR spürbar.

Grobe Zahlen pro Serialize-/Deserialize-Paar:

  • Kleines Objekt (~50 Bytes): ~1–2 Mikrosekunden.
  • Mittleres Objekt (~1 KB): ~5–15 Mikrosekunden.
  • Großes Objekt (~100 KB): ~1–2 ms.

JSON.parse / JSON.stringify sind nativer Code in V8/JSC — schnell genug, dass JSON-Serialisierung selten zum Bottleneck wird.

Mit Nicht-JSON-Systemen interoperieren? → Custom (Protobuf/Avro)
Bandbreitenkritisch (große oder viele kleine Nachrichten)? → CBOR
Typisierte Schemas in Versionskontrolle nötig? → Custom (Protobuf)
Sonst → Bei JSON bleiben

Die meisten Produktions-Apps bleiben für Actor-Wire und Persistenz bei JSON — die Perf-/Größenvorteile eines Wechsels rechtfertigen selten die operative Komplexität.