我需要对具有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库或自己编写BSON库,然后找到更有效地从V8中提取字符串的方法。一种策略可能是向BSON添加UTF16支持。
所以我来这里寻求想法,也许是理智的检查。
编辑
添加了MessagePack基准测试。这是从原始JS修改而来,使用BinaryF。C++ MessagePack库可能会提供进一步的改进,我可能会对其进行孤立测试,以直接与BSON库进行比较。