Javascript 通过将布尔值转换为数组来减少JSON大小是个好主意吗?
我是初学者。 我从API调用中获得以下信息: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项实际设
"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,我不会进行此优化。如果添加新字段,则必须在代码中更改两次。