本着这两个问题的精神:
- 是否值得努力尝试减小 JSON 大小?
- JSON 响应对象:“漂亮”的键和较大的响应,还是短的键和较小的响应?
浏览器如何处理相同对象类型的大型数组,它们的键名是否以某种方式压缩在内存中?我曾经使用过一个图形库,并通过缩短对象的键名称来获得性能提升,所以我有点坚持这种心态。看起来虽然会not如果我使用 1,000,000 个这样的对象的数组,就会有所不同:
[{
"firstNameAsWrittenInID": Pete,
"lastNameAsWrittenInID": Jenkins
},{
"firstNameAsWrittenInID": Jane,
"lastNameAsWrittenInID": Jenkins
},
...
{
"firstNameAsWrittenInID": Johann,
"lastNameAsWrittenInID": Abele
}]
或 1,000,000 个此类对象的数组:
[{
"f": Pete,
"l": Jenkins
},{
"f": Jane,
"l": Jenkins
},
...
{
"f": Johann,
"l": Abele
}]
尽管由于键名很长,第一个似乎应该使用大约两倍的内存?
您可以在这里谈论两件不同的事情。第一个也是更简单的一个是JSON 字符串,即您从网络服务接收的数据。这是一个字符串,字符串中的所有内容都很重要,包括 JSON 属性名称,甚至空格。最好以减少网络负载的方式最小化这种情况(您也可以对数据进行 gzip 压缩以获得良好的效果)。
实际的字符串大小可能不会成为问题,因为您通常不会长时间保留 JSON 字符串。那是因为当你parseJSON,你会得到一个标准的 JavaScript 对象。
因此,您更有可能询问的是具有较长属性名称的 JavaScript 对象是否比具有较短属性名称的 JavaScript 对象占用更多内存。答案显然是肯定的,因为您需要将信息放在某个地方。但这只是答案的一半。当您查看具有相同属性集的多个对象时,它会变得更加有趣。
Here, 字符串实习发挥作用。好的 JavaScript 引擎会对字符串使用字符串驻留,因此在一个字符串包含"firstNameAsWrittenInID"
,包含相同值的每个其他字符串应该能够重用该驻留字符串对象,从而减少内存占用。所以在这种情况下,重用长字符串或短字符串没有区别。
当然,原始字符串需要存储once,因此,如果您有许多不重复的长属性,那么以某种方式缩短它们是个好主意。但如果您始终重复使用属性名称,则这很可能不会导致任何额外的内存开销。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)