BSON
@deepkit/bson 是BSON的解析器和序列化器的高性能TS实现,
MongoDB二进制JSON格式。它是最快的JS BSON解析器,甚至比原生JSON.parse/stringify还要快。
Deepkit重新实现了它,因为它是一个高性能框架,官方的JS (JS -bson)和c++ (bson-ext)包都太慢了。 多慢?当转换数组中的10k个元素时,js-bson需要25ms, bson-ext需要31ms,而JSON -ext需要31ms。Parse只需要5毫秒。 这使得官方的BSON解析器比本地JSON.parse慢5倍。另一方面,Deepkit /type-bson只需要2毫秒,因此速度要快13倍。
基准
解析 BSON缓冲区,包含一个包含10k个对象的数组。
| 方法 | 时间(女士) |
|---|---|
| 官方本地bson-ext | 31岁女士 |
| 官方js-bson | 25岁女士 |
| Deepkit /bson generic v2 | 6 ms |
| Deepkit /bson通用v3 | 4女士 |
| JSON.parse | 5女士 |
| deepkit JIT /类型 | 2女士 |
序列化 一个包含10k个对象的数组。
| 方法 | 时间(女士) |
|---|---|
| 官方本地bson-ext | 39岁的女士 |
| 官方js-bson | 33岁的女士 |
| JSON.stringify | 5女士 |
| deepkit / bson JIT | 2女士 |
“deepkit/bson JIT”是指基于如下模式的解析器/序列化器:
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);
而“deepkit/type generic”意味着无模式:
import {parseObject, ParserV2, ParserV3} from '@deepkit/bson';
const bson = new Buffer([]);
const object1 = parseObject(new ParserV2(bson));
const object2 = parseObject(new ParserV3(bson));
差异
与官方序列化器有几个不同之处。
- ObjectId被反序列化为字符串。
- UUID被反序列化为字符串。
- BigInt被支持并序列化为long。
- 支持无限大小的BigInt(序列化为二进制)
- Long被反序列化为BigInt。