Necesito serializar objetos moderadamente complejos con 1-100 de propiedades de tipo mixto.La serialización más rápida posible de objetos Javascript con Google V8
JSON se usó originalmente, luego cambié a BSON, que es marginalmente más rápido. objetos
Codificación 10000 muestra
JSON: 1807mS
BSON: 1687mS
MessagePack: 2644mS (JS, modified for BinaryF)
Quiero un orden de magnitud aumento; está teniendo un impacto ridículamente malo en el resto del sistema.
Parte de la motivación para pasar a BSON es el requisito para codificar datos binarios, por lo que JSON es (ahora) inadecuado. Y porque simplemente omite los datos binarios presentes en los objetos, está "haciendo trampa" en esos puntos de referencia.
perfilada rendimiento BSON hot-spots
- (inevitable?) Conversión de cadenas UTF16 V8 JS para UTF8.
- malloc y de cadena de operaciones dentro de la biblioteca BSON
El codificador BSON se basa en la biblioteca Mongo BSON.
Un serializador binario nativo V8 puede ser maravilloso, pero como JSON es nativo y rápido de serializar, temo que incluso eso podría no dar la respuesta. Tal vez mi mejor opción es optimizar la biblioteca BSON o escribir mi propia figura más eficiente para extraer cadenas del V8. Una táctica podría ser agregar soporte UTF16 a BSON.
Así que estoy aquí para obtener ideas, y tal vez un control de cordura.
Editar
referencia Agregado MessagePack. Esto fue modificado desde el JS original para usar BinaryF.
La biblioteca MessagePack de C++ puede ofrecer más mejoras, puedo compararla de forma aislada para compararla directamente con la biblioteca BSON.
Quizás podría proporcionar un caso de prueba http://jsperf.com/ para ayudar a comprender el tipo de datos que necesita almacenar –
Solo objetos JS estándar: {param1: "nombre", param2: {paramA: 1, paramB: [0x0,0x1,0x2], paramC:}} con hasta 100 propiedades, anidadas arbitrariamente, algunas de las cuales contendrán matrices de bytes utilizando CommonJS BinaryF. Sin BinaryF y un serializador BSON, es imposible hacer comparaciones útiles. –
hplbsh
¿Tiene algún enlace/referencia a lo que utilizó para BSON, MsgPack, etc.? –