Какие в ноде встроенные средства сериализации аналогичны JSON только для бинарной сериализации?nodejs-5

Node.js предоставляет несколько мощных инструментов для бинарной сериализации, которые служат аналогами JSON для работы с бинарными данными. Рассмотрим основные из них.

1. Buffer и TypedArray

Базовые строительные блоки для работы с бинарными данными:

// Создание буфера
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);

// Преобразование в строку
console.log(buf.toString('hex')); // 627566666572

2. Protocol Buffers

Хотя и не встроен напрямую, часто используется вместе с Node.js:

const protobuf = require('protobufjs');
const root = protobuf.loadSync('message.proto');
const Message = root.lookupType('Message');

const payload = { id: 1, content: 'Hello' };
const message = Message.create(payload);
const buffer = Message.encode(message).finish();

3. MessagePack

Альтернатива JSON с бинарным представлением:

const msgpack = require('msgpack-lite');
const data = { name: 'Node.js', binary: true };
const encoded = msgpack.encode(data);
const decoded = msgpack.decode(encoded);

4. BSON

Встроенная поддержка через модуль bson:

const { BSON } = require('bson');
const doc = { _id: new ObjectId(), name: 'Node.js' };
const data = BSON.serialize(doc);
const deserialized = BSON.deserialize(data);

5. Node.js v8.serializer API

Низкоуровневый API для сериализации в формат V8:

const v8 = require('v8');
const structuredClone = obj => {
  return v8.deserialize(v8.serialize(obj));
};

const obj = { a: 1, b: { c: 2 } };
const cloned = structuredClone(obj);

6. Worker Threads TransferList

Особый случай передачи бинарных данных между потоками:

const { Worker, isMainThread } = require('worker_threads');

if (isMainThread) {
  const worker = new Worker(__filename, {
    workerData: new Uint8Array([1, 2, 3]),
    transferList: [workerData.buffer]
  });
}

Сравнение методов

Метод Размер Скорость Человекочитаемость Поддержка типов
JSONБольшойСредняяДаОграниченная
BSONМеньшеБыстраяНетРасширенная
Protocol BuffersМалыйОчень быстраяНетСтрогая
MessagePackМалыйБыстраяНетБлизкая к JSON
v8.serializeСреднийБыстраяНетПолная V8

Резюмируем

  1. Для максимальной производительности используйте Protocol Buffers или BSON
  2. Для совместимости с JSON выбирайте MessagePack
  3. Для внутренней сериализации в процессах Node.js подходит v8.serialize
  4. Для передачи между потоками используйте Transferable Objects
  5. Buffer/TypedArray — базовый инструмент для ручной работы с бинарными данными

Выбор инструмента зависит от требований к производительности, размерам данных и необходимости совместимости с другими системами.