Сжать буфер в hapijs и отправить клиенту - PullRequest
0 голосов
/ 27 февраля 2019

У меня огромный объект JSON.(может иметь массив до 100 объектов) Наименьший размер - около 8 КБ.Максимальный размер может достигать 2 МБ.

Если я отправлю его как JSON с response.type("application/json"), то он будет иметь размер 8 КБ ;

response.type("application/json");
response.content = getJSONData();

Чтобы решить эту проблему, ясоздал буфер, используя protobufjs .Если я закодирую его с использованием protobufjs и отправлю как octet-stream, он будет иметь размер 93kb

response.type("application/octet-stream");
response.content = myProtoBufSchema.encode(content).finish();

И ответ будет в виде строки {"type":"Buffer","data":[10,36,51,48,53....]

Если я добавлю response.variety = "buffer"; к вышеуказанному коду, он отправит его как буферный объект, который я преобразую на стороне клиента, используя следующий размер, уменьшенный до 27kb

var buffer = new Uint8Array(xhr.response);
var response = parseProtobuf(buffer);

The content-encoding: gzip доступно только при отправке в виде JSON.

Но оно не добавляется при отправке в виде буфера.

Если я добавляю response.header("Content-Encoding", "gzip");, размер уменьшается до 600Bytes , но я получаю сообщение об ошибке в браузере, err_content_decoding_failed, потому что он на самом деле не сжимается, но заголовок говорит, что кодировка содержимого была gzip.

Так что я могу изменитьили как использовать zlib в хапи для сжатия моего буфера (не JSON).

...