首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSON中手动“压缩”大量布尔值

在JSON中手动“压缩”大量布尔值
EN

Stack Overflow用户
提问于 2022-08-01 14:24:06
回答 2查看 50关注 0票数 0

我们有一个数据模型,每个实体都有600个布尔值。所有这些数据都需要通过JSON从node.js后端传输到角度前端。

我在考虑各种优化它的方法(这是一个内部API,不公开,所以坚持最佳实践不像性能和节省带宽那么重要)。

我不是一个母语为Javascript的人,所以我希望得到一些关于我正在考虑的选择的一些反馈,这些选项是:

  • 将其转换为位字段,并使用巨大的(600位) BigInt

这是否可行的方法呢?我可以想象,就性能而言,可能会相当可怕。

  • 将600位拆分为10个整数(因为JS整数为64位),并将它们放入JSON

中的数组中

编码二进制blob的

  • Base64 (将被解码为一个UInt8Array?)

使用像Protobuf这样的东西的

  • ?这可能太过分了,因为我不希望在这个优化上花费超过1-2个小时;当然也不想对体系结构进行重大更改(

)。

附带注意:由于基础设施的原因,我们没有对服务器端进行压缩,这使得这变得更加复杂,也是我们在数据级别上实现此功能的原因。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2022-11-01 17:49:49

正如Evan指出的,例如,将您的布尔值转换为true="t“和false="f”的单个字符时,这600个布尔值将变成一个由600个字符组成的联合字符串,可以很好地拆分为200个大小的3字符串,然后,一旦在前面接收到,就可以将传输连接起来,如果您想从字符串中恢复Bollean值(​​),只需简单地重新计算就可以了。我不知道数据是如何设置并获得的,只是将这个参数更改为我认为需要自动化的参数。在前面获得最后的字符串之后,这里是reg的一个例子,它可以使用600布尔值将字符串转换为数组。还可以通过定义对象而不是数组来定义索引。

代码语言:javascript
复制
function convert_myBool(str)
   {
      /*var reg = new RegExp('.{1}', 'g');
      var tmpTab = str.replace(reg, function(matched){
            return matched == "t"?true:false;
      });*/
      //map is best 
      tmpTab = str.split('').map((value) =>{
        return value == "t"?true:false;
      });
      return tmpTab;
   };

我动态地写了这篇文章,当然,它可以被思考、改进、替换等等,希望能有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2022-08-01 16:08:26

可以用任何方式分类吗?如果布尔值总是与相关值一起发生,则可以对它们进行分组和简化。

根据您对该数据的使用情况,您可以根据使用频率缓存其中的一些信息或回忆录。然而,缓存会有一个空间权衡。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73195193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档