Sérialisation d'objets dans Node.js : JSON, Buffer et Protobuf

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Sérialisation d'objets en JavaScript (Node.js) : de JSON aux protocoles binaires

\n\n

La 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\n

1. JSON intégré : le standard de facto

\n

Le 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().

\n\n
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\n

Avantages :

\n
    \n
  • Format lisible par l'homme
  • \n
  • Prise en charge intégrée dans tous les environnements
  • \n
  • Simplicité de débogage
  • \n
\n\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
\n\n

2. Buffer et sérialisation binaire dans Node.js

\n

Pour 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.

\n\n
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\n

Pour la sérialisation complexe d'objets au format binaire, il est préférable d'utiliser des bibliothèques spécialisées.

\n\n

3. Protocol Buffers (protobuf) — sérialisation binaire efficace

\n

La 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.

\n\n

Installation :

\n
npm install protobufjs
\n\n

Exemple d'utilisation :

\n
const 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\n

Fichier user.proto :

\n
syntax = "proto3";\npackage userpackage;\nmessage User {\n  int32 id = 1;\n  string name = 2;\n  string email = 3;\n}\n
\n\n

Avantages :

\n
    \n
  • Performance maximale
  • \n
  • Taille compacte (30 à 50 % plus petite que JSON)
  • \n
  • Typage strict et validation
  • \n
  • Multiplateforme
  • \n
\n\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
\n\n

4. MessagePack — JSON binaire

\n

Recommendations