Objektserialisierung in JavaScript (Node.js): Von JSON bis zu binären Protokollen
\n\nSerialisierung ist der Prozess der Umwandlung komplexer Datenstrukturen (Objekte, Arrays, Map, Set) in ein Format, das in einer Datei gespeichert, über ein Netzwerk übertragen oder in einer Datenbank gespeichert werden kann. In Node.js ist diese Aufgabe besonders wichtig, da Serveranwendungen oft mit großen Datenmengen, Microservices und WebSocket-Verbindungen arbeiten. In diesem Artikel werden wir die wichtigsten Werkzeuge und Bibliotheken zur Serialisierung von Objekten in der Node.js-Umgebung behandeln.
\n\n1. Integriertes JSON: Der De-facto-Standard
\nDas JSON-Modul ist in Node.js ohne Installation zusätzlicher Pakete verfügbar. Es unterstützt die Methoden JSON.stringify() und JSON.parse().
const user = {\n name: 'Anna',\n age: 28,\n skills: ['JavaScript', 'Node.js'],\n active: true\n};\n\n// Serialisierung\nconst jsonString = JSON.stringify(user);\nconsole.log(jsonString);\n// {"name":"Anna","age":28,"skills":["JavaScript","Node.js"],"active":true}\n\n// Deserialisierung\nconst parsedUser = JSON.parse(jsonString);\nconsole.log(parsedUser.name); // Anna\n\nVorteile:
\n- \n
- Menschlich lesbares Format \n
- Integrierte Unterstützung in allen Umgebungen \n
- Einfache Fehlersuche \n
Nachteile:
\n- \n
- Unterstützt keine
undefined,BigInt,Date(wandelt in String um),Map,Set\n - Langsamer als binäre Formate \n
- Übermäßige Größe aufgrund von Syntaxelementen (Anführungszeichen, Kommas) \n
2. Buffer und binäre Serialisierung in Node.js
\nFür Hochleistungsanwendungen (Spiele, Finanzdaten, IoT) werden binäre Formate verwendet. In Node.js gibt es dafür das Buffer-Modul.
const buf = Buffer.alloc(8);\nbuf.writeUInt32BE(123456, 0); // Schreiben einer 4-Byte-Ganzzahl ohne Vorzeichen\nbuf.writeUInt32BE(789012, 4); // zweite Zahl\n\nconsole.log(buf); // <Buffer 00 01 e2 40 00 0c 08 14>\n\n// Lesen\nconst a = buf.readUInt32BE(0); // 123456\nconst b = buf.readUInt32BE(4); // 789012\n\nFür die komplexe Serialisierung von Objekten im Binärformat ist es besser, spezialisierte Bibliotheken zu verwenden.
\n\n3. Protocol Buffers (protobuf) — Effiziente binäre Serialisierung
\nDie Bibliothek protobuf.js ermöglicht die Serialisierung von Objekten gemäß einem Schema, das in .proto-Dateien beschrieben ist. Dies ist ein Standard, der in gRPC und vielen Microservice-Architekturen verwendet wird.
Installation:
\nnpm install protobufjs\n\nAnwendungsbeispiel:
\nconst protobuf = require('protobufjs');\n\nprotobuf.load('user.proto').then(root => {\n const User = root.lookupType('userpackage.User');\n\n const payload = { id: 1, name: 'Ivan', email: 'ivan@example.com' };\n \n // Serialisierung\n const errMsg = User.verify(payload);\n if (errMsg) throw Error(errMsg);\n \n const buffer = User.encode(payload).finish();\n console.log('Binärer Puffer:', buffer);\n\n // Deserialisierung\n const decoded = User.decode(buffer);\n console.log('Dekodiert:', decoded);\n});\n\nDatei user.proto:
syntax = "proto3";\npackage userpackage;\nmessage User {\n int32 id = 1;\n string name = 2;\n string email = 3;\n}\n\n\nVorteile:
\n- \n
- Maximale Leistung \n
- Kompakte Größe (30-50 % kleiner als JSON) \n
- Strenge Typisierung und Validierung \n
- Plattformunabhängigkeit \n
Nachteile:
\n- \n
- Erfordert eine Schemabeschreibung (.proto) \n
- Schwierigere Fehlersuche (binäre Daten) \n
- Notwendigkeit der Synchronisierung von Schemas zwischen Diensten \n
4. MessagePack — Binäres JSON
\nAuch in der Bibliothek
Reaktive Programmierung in Swift: Combine und RxSwift für iOS/macOS
Nodemailer für JavaScript (Node.js): Komplettguide mit Beispielen
Geolokalisierung und Karten in Kotlin: Überblick über Bibliotheken und Tools
Generierung von PDF-Berichten in Rust: Bibliotheken und praktische Beispiele