首页 > 解决方案 > 在 hapijs 中压缩缓冲区并发送给客户端

问题描述

我有一个巨大的 JSON 对象。(最多可以有 100 个对象的数组)它的最小大小约为 8kb。最大的可以达到 2 mb。

如果我将它作为 JSON 发送,response.type("application/json")它的大小为8kb

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);

content-encoding: gzip仅当我将其作为 JSON 发送时才可用。

但是当我将它作为缓冲区发送时它不会被添加。

如果我添加response.header("Content-Encoding", "gzip");大小减少到600Bytes,但我在浏览器上收到错误err_content_decoding_failed,因为它实际上并没有压缩,但标题说内容编码是 gzip。

那么有什么我可以改变的,或者我如何在 hapi 中使用zlib来压缩我的缓冲区(不是 JSON)。

标签: gzipprotocol-bufferscontent-typezlibhapijs

解决方案


推荐阅读