Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
const void *lenPtr = ...;
uint32_t len = *((uint32_t*)lenPtr); // for 4-byte length
len &= 0xFFFFFF; // for 3-byte length
uint16_t len = *((uint16_t*)lenPtr); // for 2-byte length
uint8_t len = *((uint8_t*)lenPtr); // for 1-byte length
{
"fruits":["apple", "orange"],
"sport":[{"football" : {"players" : 11, "goalkeeper" : true}, "hockey" : {"players" : 6, "goalkeeper" : true} }]
"note" : null
}
Формат Кол-во байт на одну Кол-во десериализуемых
структуру данных структур в 1 секунду
(меньше - лучше) (больше - лучше)
ProtoBuf 219 32051/s
MsgPack 303 50505/s
JSON 343 52356/s
$ time perl -MJSON::XS -ne 'push @a, decode_json($_)' file.jsonДело в том, что, как я уже упоминал, основное время уходит на выделение (и освобождение) памяти. Использование push в этом примере приводит к тому, что десериализуемые данные будут накапливаться в памяти, и будут удалены из памяти в момент выхода скрипта — т.е. фактически экономия на вызовах free(). Этот мелкий нюанс даёт разницу в 15% при обработке 8MB файла с 35000 json-структурами.
{"Table":{
"Header":["Id","Time","EventTypeId","ParameterId","UnitId","Multiplier","Value"],
"Data":[
[871,"08:12:04",57,12,3,7,120750049],
[872,"08:12:07",22,79,2,10,288386016],
...
[1325,"10:17:21",13,10,3,10,290537253]
]}}
Вы можете заюзать новую либу для компрессии JSON или JS объектов:
Эта библиотека проста в использовании:
// import library methods
import { encode, decode } from '@xobj/core';
// sample data object
const data = { x: 1, y: 2, name: 'Test' };
// encode to ArrayBuffer
const buffer = encode(data);
// decode to object from ArrayBuffer
const buffer = decode(buffer);
Так же это решение поддерживает все базовые JS типы а так же Date, RegExp, BigInt, Symbol, TypedArrays и другие. Кроме того вы можете использовать рекурсивные ссылки внутри ваших данных. Ну и конечно же можно добавлять кастомные типы.
https://github.com/superman2211/xobj/tree/master/packages/core
Universal Binary JSON — ещё один бинарный JSON