Comments 18
Классный подход, явно вижу плюсы. Интересно, а почему, парсить бинарный формат по сути, дольше? (может это из-за JS движка, и какой нибудь Java backend показал бы обратный эффект, но для любого реального web приложения это разница конечно сродни погрешности)
Дебажить protobuff's правда сложнее ибо JSON читать легче.
Дебажить protobuff's правда сложнее ибо JSON читать легче.
0
Ну в моему случае я гонял чистый JSON как объект, и не юзал JSON.parse, stringify… отсюда и скорость, по идее если гонять стрингу по какой то причине, будет +- так же по времени как и бинарник, но удобств нет кроме дебага.
0
Перепаковка бинаря в объект. В случае json там движок лопатит парсером на компилируемом языке. Так-то всяко быстрее даже с учетом jit в javascript движках.
0
Кстати интересный вопрос, а по памяти что? Вот такая распаковка запаковка в объект не вызывает увеличения так же потребления памяти? А то что-то есть подозрение шило на мыло будет.
+1
Самый главная задача в нашем случае привязаться к строготипизированным сущностям (в созданных генератором классах есть какая никакая валидация входящих данных, и на пыхе так же), чтобы сервер и клиент общался на одном языке сущностей.
По памяти еще не изучил вопрос, думаю в скором времени надо заняться.
По памяти еще не изучил вопрос, думаю в скором времени надо заняться.
-2
Вы не сравнивали вашу реализацию с graphql? Есть какие-то преимущества и недостатки?
0
Есть конечно небольшой минус, это скорость сериалиации и десериализации
Попробуйте другую реализацию github.com/protobufjs/protobuf.js
0
А пробовали использовать сгенерированный gRPC клиент?
0
Он не генерирует клиент, надо самому писать реализацию
0
Генерирует в github.com/grpc/grpc-web есть флаг --grpc-web_out
0
Protobuf — довольно нецдобная штука.
Идеальный вариант — MessagePack + JSON Schema.
Идеальный вариант — MessagePack + JSON Schema.
0
Вы можете заюзать новую либу для компрессии 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
0
Sign up to leave a comment.
Структурированный протокол обмена данных Protobuf или JSON во фронтенде?