@deepkit/bson
TypeScript icon, indicating that this package has built-in type declarations

1.0.1-alpha.146 • Public • Published

BSON

@deepkit/bson is a high-performance TS implementation of a parser and serializer for BSON, the MongoDB Binary JSON format. It's the fastest JS BSON parser, even faster than native JSON.parse/stringify.

Deepkit has reimplemented it because it's a high-performance framework and both the official JS (js-bson) and C++ (bson-ext) packages are too slow. How slow? When converting 10k elements in an array, js-bson takes 25ms, bson-ext takes 31ms, whiles JSON.parse takes only 5ms. This makes the official BSON parser 5x slower than native JSON.parse. deepkit/type-bson on the other hand takes only 2ms and is therefore 13x faster.

Benchmark

Parsing BSON buffer that contains an array with 10k objects.

Method Time (ms)
official native bson-ext 31ms
official js-bson 25ms
deepkit/bson generic v2 6ms
deepkit/bson generic v3 4ms
JSON.parse 5ms
deepkit/type JIT 2ms

Serializing an array with 10k objects.

Method Time (ms)
official native bson-ext 39ms
official js-bson 33ms
JSON.stringify 5ms
deepkit/bson JIT 2ms

"deepkit/bson JIT" means a parser/serializer based on a schema like so:

import {t} from '@deepkit/type';
import {getBSONDecoder} from '@deepkit/bson';

interface Model {
    username: string;
    tags: string[];
    priority: number;
}

const decoder = getBSONDecoder<Model>();
const bson = new Buffer([]);

const document = decoder(bson);

whereas "deepkit/type generic" means schema-less:

import {parseObject, ParserV2, ParserV3} from '@deepkit/bson';
const bson = new Buffer([]);

const object1 = parseObject(new ParserV2(bson));

const object2 = parseObject(new ParserV3(bson));

Differences

There are a couple of differences to the official serializer.

  • ObjectId is deserialized as string.
  • UUID is deserialized as string.
  • BigInt is supported and serialized as long.
  • Unlimited size BigInt supported (serialised as binary)
  • Long is deserialized as BigInt.

Readme

Keywords

none

Package Sidebar

Install

npm i @deepkit/bson

Weekly Downloads

850

Version

1.0.1-alpha.146

License

MIT

Unpacked Size

764 kB

Total Files

81

Last publish

Collaborators

  • marcj