Pull to refresh

Comments 18

Классный подход, явно вижу плюсы. Интересно, а почему, парсить бинарный формат по сути, дольше? (может это из-за JS движка, и какой нибудь Java backend показал бы обратный эффект, но для любого реального web приложения это разница конечно сродни погрешности)
Дебажить protobuff's правда сложнее ибо JSON читать легче.
Ну в моему случае я гонял чистый JSON как объект, и не юзал JSON.parse, stringify… отсюда и скорость, по идее если гонять стрингу по какой то причине, будет +- так же по времени как и бинарник, но удобств нет кроме дебага.
Перепаковка бинаря в объект. В случае json там движок лопатит парсером на компилируемом языке. Так-то всяко быстрее даже с учетом jit в javascript движках.
Кстати интересный вопрос, а по памяти что? Вот такая распаковка запаковка в объект не вызывает увеличения так же потребления памяти? А то что-то есть подозрение шило на мыло будет.
Самый главная задача в нашем случае привязаться к строготипизированным сущностям (в созданных генератором классах есть какая никакая валидация входящих данных, и на пыхе так же), чтобы сервер и клиент общался на одном языке сущностей.

По памяти еще не изучил вопрос, думаю в скором времени надо заняться.
Тогда стоит еще из фронтенда выкинуть js и переехать на typescript. Иначе типизация слабовата будет.
В планах, как на VUE3 перейдем, чтобы не напарываться на грабли
Вы не сравнивали вашу реализацию с graphql? Есть какие-то преимущества и недостатки?
Не удалось, сложно внедрить его в нашу реализацию бэка. Протобаф хорошо лег на код который уже имеется.

Для GraphQL, в таких случаях, имеет смысл писать отдельный API Gateway, который будет делать запросы к остальному беку по HTTP API, преобразовывать и отдавать наружу GraphQL.

А пробовали использовать сгенерированный gRPC клиент?
Он не генерирует клиент, надо самому писать реализацию
Спасибо за пример, не видел даже, гляну как нибудь)
Protobuf — довольно нецдобная штука.
Идеальный вариант — MessagePack + JSON Schema.

да, спустя пару лет ушли в Swagger

Вы можете заюзать новую либу для компрессии JSON или JS объектов:

@xobj/core

Эта библиотека проста в использовании:

// 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

Sign up to leave a comment.

Articles