У меня огромный объект 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).