我需要序列化具有 1-100 个混合类型属性的中等复杂对象。
最初使用 JSON,然后我切换到 BSON,它稍微快一点。
编码 10000 个样本对象
JSON: 1807mS
BSON: 1687mS
MessagePack: 2644mS (JS, modified for BinaryF)
我想要一个数量级的增长;它对系统的其他部分产生了非常糟糕的影响。
迁移到 BSON 的部分动机是需要对二进制数据进行编码,因此 JSON(现在)不适合。而且因为它只是跳过了对象中存在的二进制数据,所以它在那些基准测试中是“作弊”的。
剖析的 BSON 性能热点
- (不可避免?)将 UTF16 V8 JS 字符串转换为 UTF8。
- BSON 库中的 malloc 和字符串操作
BSON 编码器基于 Mongo BSON 库。
原生 V8 二进制序列化器可能很棒,但由于 JSON 是原生的并且可以快速序列化,我担心即使这样也无法提供答案。也许我最好的选择是优化 BSON 库的性能,或者编写我自己的 plus 找出更有效的方法来从 V8 中提取字符串。一种策略可能是向 BSON 添加 UTF16 支持。
所以我来这里是为了想法,也许是理智检查。
编辑
添加了 MessagePack 基准测试。这是从原始 JS 修改为使用 BinaryF。
C++ MessagePack 库可能会提供进一步的改进,我可能会单独对其进行基准测试以直接与 BSON 库进行比较。