gzip - 在 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)。
解决方案
推荐阅读
- html - responsive navigation bar without java script
- r - Rstudio - Writing superscript on axis
- excel-formula - Excel formula to find the ROW number of a previous blank cell in a particular column
- angular-cli - 两个 Angular 项目 - 不同的配置
- mysql - 如何根据一个值从表一中选择所有值,然后从同一个表中选择该表中的值?
- ios - iOS Swift AdMob 原生广告 - NSInternalInconsistencyException 无法在名称为 UnifiedNativeAdView 的捆绑 NSBundle 中加载 NIB
- apache-spark - 具有模式注册表支持的 Spark from_avro 函数
- excel - 从 Excel 到宏的参数传输
- java - Java 模块化,使用 gradle 的 java9-modularity 插件的测试类中的编译问题
- r - 更改数据框中列内的顺序