Sérialisation d'objets en JavaScript (Node.js) : de JSON aux protocoles binaires
\n\nLa sérialisation est le processus de conversion de structures de données complexes (objets, tableaux, Map, Set) en un format qui peut être sauvegardé dans un fichier, transmis sur un réseau ou stocké dans une base de données. Dans Node.js, cette tâche est particulièrement cruciale, car les applications serveur travaillent souvent avec de grands volumes de données, des microservices et des connexions WebSocket. Dans cet article, nous allons examiner les principaux outils et bibliothèques pour la sérialisation d'objets dans l'environnement Node.js.
\n\n1. JSON intégré : le standard de facto
\nLe module JSON est disponible dans Node.js sans installation de paquets supplémentaires. Il prend en charge les méthodes JSON.stringify() et JSON.parse().
const user = {\n name: 'Anna',\n age: 28,\n skills: ['JavaScript', 'Node.js'],\n active: true\n};\n\n// Sérialisation\nconst jsonString = JSON.stringify(user);\nconsole.log(jsonString);\n// {"name":"Anna","age":28,"skills":["JavaScript","Node.js"],"active":true}\n\n// Désérialisation\nconst parsedUser = JSON.parse(jsonString);\nconsole.log(parsedUser.name); // Anna\n\nAvantages :
\n- \n
- Format lisible par l'homme \n
- Prise en charge intégrée dans tous les environnements \n
- Simplicité de débogage \n
Inconvénients :
\n- \n
- Ne prend pas en charge
undefined,BigInt,Date(convertit en chaîne),Map,Set\n - Plus lent que les formats binaires \n
- Taille excessive due aux éléments syntaxiques (guillemets, virgules) \n
2. Buffer et sérialisation binaire dans Node.js
\nPour les applications haute performance (jeux, données financières, IoT), on utilise des formats binaires. Dans Node.js, le module Buffer est disponible à cet effet.
const buf = Buffer.alloc(8);\nbuf.writeUInt32BE(123456, 0); // écriture d'un entier non signé de 4 octets\nbuf.writeUInt32BE(789012, 4); // deuxième nombre\n\nconsole.log(buf); // <Buffer 00 01 e2 40 00 0c 08 14>\n\n// Lecture\nconst a = buf.readUInt32BE(0); // 123456\nconst b = buf.readUInt32BE(4); // 789012\n\nPour la sérialisation complexe d'objets au format binaire, il est préférable d'utiliser des bibliothèques spécialisées.
\n\n3. Protocol Buffers (protobuf) — sérialisation binaire efficace
\nLa bibliothèque protobuf.js permet de sérialiser des objets selon un schéma décrit dans des fichiers .proto. C'est un standard utilisé dans gRPC et de nombreuses architectures de microservices.
Installation :
\nnpm install protobufjs\n\nExemple d'utilisation :
\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 // Sérialisation\n const errMsg = User.verify(payload);\n if (errMsg) throw Error(errMsg);\n \n const buffer = User.encode(payload).finish();\n console.log('Tampon binaire :', buffer);\n\n // Désérialisation\n const decoded = User.decode(buffer);\n console.log('Décodé :', decoded);\n});\n\nFichier user.proto :
syntax = "proto3";\npackage userpackage;\nmessage User {\n int32 id = 1;\n string name = 2;\n string email = 3;\n}\n\n\nAvantages :
\n- \n
- Performance maximale \n
- Taille compacte (30 à 50 % plus petite que JSON) \n
- Typage strict et validation \n
- Multiplateforme \n
Inconvénients :
\n- \n
- Nécessite une description du schéma (.proto) \n
- Débogage plus difficile (données binaires) \n
- Nécessité de synchroniser les schémas entre les services \n
4. MessagePack — JSON binaire
\nAussi dans la bibliothèque
Traitement d'images en Java : redimensionnement et recadrage (resize, crop)
Log4j 2 / SLF4J pour Java : guide complet avec exemples
Génération de PDF en TypeScript : bibliothèques et outils pour Node.js
Traitement d'images en C++ : bibliothèques CImg, OpenCV et Magick++
Bibliothèque standard JavaScript (Node.js) : aperçu complet