Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过将布尔值转换为数组来减少JSON大小是个好主意吗?_Javascript_Node.js_Json_Performance_Indexof - Fatal编程技术网

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

Javascript 通过将布尔值转换为数组来减少JSON大小是个好主意吗?,javascript,node.js,json,performance,indexof,Javascript,Node.js,Json,Performance,Indexof,我是初学者。 我从API调用中获得以下信息: "formatting": { "isBold": false, "isItalic": false, "isUnderlined": false, "isFirstWordOfSentence": false ... and so on. }, 现在发送这么多数据似乎相当昂贵。我们可能会遇到这样一种情况,即10项中只有1项实际设

我是初学者。 我从API调用中获得以下信息:

"formatting": {
  "isBold": false,
  "isItalic": false,
  "isUnderlined": false,
  "isFirstWordOfSentence": false
  ... and so on.
},
现在发送这么多数据似乎相当昂贵。我们可能会遇到这样一种情况,即10项中只有1项实际设置为true,但我们仍然需要发送所有10项。我想知道我是否可以用一种不同的方式来构造它,这样可以节省发送这么多数据,但仍然保留相同数量的信息

我考虑将数据存储在数组中,如下所示:

"formatting": ['isBold', 'isFirstWordofSentence']
然后在前端,我不需要检查
isBold
是否为
true
而只需要执行
formatting.indexOf('isBold')!=-1
。我知道一个缺点是现在代码不再那么清晰,但我想知道它是否可行

这肯定会减少我的JSON的大小。同时,我不确定前端的
indexOf
调用是否会比简单的布尔检查更昂贵?在这种情况下,我总是可以正常化后,我取得虽然

如有任何建议或建议,将不胜感激。请记住我是初学者。

您可以使用返回布尔结果的

formatting.includes('isBold')
一种更短的方法是只存储
true
值。这允许在不迭代数组的情况下直接使用属性

formatting: {
    isBold: true
}
访问权限与具有
false
的属性相同,但访问权限返回
true
未定义的
。在后一种情况下,如果需要,可以将其转换为布尔值


否则使用JavaScript的自动强制方式,通过使用<代码>中的值/如果< < /Cord>语句或其他依赖检查,如与

< P>一样,对于任何数据发送/解析问题,这里有很多事情要考虑。 我倾向于不进行您在这里考虑的那种优化,除非您同时处理大量数据[数百万/数十亿行]


您也不需要运行
!==-1
打开
.indexOf()
。简单地检查真实性是有效的。另一位用户还提到JS数组具有
.includes()
。这就是说,这将运行列表的顺序扫描,并且字典查找速度更快。这肯定会减慢处理数据的速度,而不是加快发送数据的速度。

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

回答:为了减小尺寸,您可以使用一些假设:如果没有找到值,则假设它为false

发送一个

{
  formatting: ['isBold', 'isItalic']
}
相当于

{
  formatting: {
    isBold: true,
    isItalic: true,
    isUnderlined: false,
    isFirstWordOfSentence: false
  }
}
然后,您可以使用
Array.prototype.includes检查该值

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

您可以考虑在API响应

中避免错误值
"formatting": {
  "isUnderlined": true,
  "isItalic": false
}

"formatting": {
  "isUnderlined": true
}
两种情况下的条件搜索返回相同的结果

如果最终将响应转换为数组,
formatting.indexOf('is下划线')
formatting.includes('is下划线')
如果存在于数组中,则返回true

为清晰起见,您可以使用
格式化。includes('isBold')
您的性能要求是什么?呼叫/秒、带宽、延迟等。问题的答案取决于您认为您的问题将出现在何处。非常感谢。你仍然认为如果我像上面描述的那样获取它,然后在前端直接将它规范化为第一种格式,那么它就不值得了吗?然后我只遍历数组一次,然后再进行字典查找。还是听起来我做的弊大于利?我很欣赏这里的创造性思维,但API调用的大部分延迟将归因于延迟,而不一定是构建JSON的服务器或解析JSON的客户端。如果您接受数组并重新创建JSON,我不会进行此优化。如果添加新字段,则必须在代码中更改两次。