为了账号安全,请及时绑定邮箱和手机立即绑定

通过将布尔值转换为数组来减少 JSON 大小是个好主意吗?

通过将布尔值转换为数组来减少 JSON 大小是个好主意吗?

波斯汪 2023-04-27 16:30:53
初学者在这里。我从我的 API 调用中得到以下信息:"formatting": {  "isBold": false,  "isItalic": false,  "isUnderlined": false,  "isFirstWordOfSentence": false  ... and so on.},现在发送这么多数据似乎相当昂贵。我们可能会遇到这样一种情况,即 10 项中只有一项实际设置为 true,但我们仍然需要发送所有 10 项。我想知道我是否可以用不同的方式构建它,这样可以节省发送这么多数据,但仍然保留相同数量的信息。我正在考虑像这样将数据存储在数组中:"formatting": ['isBold', 'isFirstWordofSentence']然后在前端,而不是检查我是否isBold会true做一个formatting.indexOf('isBold') !== -1. 我知道缺点是现在代码不再那么清晰了,但我想知道它是否可行?它肯定会减少我的 JSON 的大小。同时我不确定indexOf前端的调用最终是否会比简单的布尔检查更昂贵?在那种情况下,我总是可以在获取之后进行规范化。任何建议或意见将不胜感激。请记住我是初学者。
查看完整描述

4 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可能会考虑避免 API 响应中的错误值


"formatting": {

  "isUnderlined": true,

  "isItalic": false

}


"formatting": {

  "isUnderlined": true

}

两种情况下的条件搜索返回相同的结果


如果您最终将响应转换为数组, formatting.indexOf('isUnderlined')并且formatting.includes('isUnderlined')如果存在于数组中则返回 true


查看完整回答
反对 回复 2023-04-27
?
UYOU

TA贡献1878条经验 获得超4个赞

与数据发送/解析的任何问题一样,这里有很多事情需要考虑。

我倾向于不进行您在这里考虑的那种优化,除非您正在处理大量数据 [同时处理数百万/数十亿行]。

您也不需要!== -1.indexOf(). 只需检查真实性即可。另一位用户还提到 JS 数组有.includes(). 话虽这么说,这将对列表进行顺序扫描,并且字典查找速度更快。这肯定会减慢处理数据的速度,而不是加快发送数据的速度。


查看完整回答
反对 回复 2023-04-27
?
弑天下

TA贡献1818条经验 获得超8个赞

您可以使用Array#includeswhich 返回布尔结果。

formatting.includes('isBold')

一种更短的方法是只存储true值。这允许直接使用该属性而无需迭代数组。

formatting: {
    isBold: true
    }

访问与具有 的属性相同false,但访问返回trueundefined。在后一种情况下,您可以根据需要转换为布尔值。

否则,通过在语句或其他依赖检查中使用truthy / falsy值,利用 Javascript 自动强制转换为布尔值的优势if,例如条件(三元)运算符?:


查看完整回答
反对 回复 2023-04-27
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

前言:在大多数情况下,JSON 大小与成本无关。如果您希望减少延迟,请查看 websockets。


答案:为了减小尺寸,您可以使用一些假设:如果未找到该值,则假设它是假的。


发送一个 JSON


{

  formatting: ['isBold', 'isItalic']

}

相当于


{

  formatting: {

    isBold: true,

    isItalic: true,

    isUnderlined: false,

    isFirstWordOfSentence: false

  }

}

然后,您可以使用检查值Array.prototype.includes


const isBoldTrue = data.formatting.includes('isBold')


查看完整回答
反对 回复 2023-04-27
  • 4 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信