@deepkit/bson
v1.0.1-alpha.155
Published
Deepkit BSON parser
Downloads
3,325
Readme
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.