IndexedDB 对象键:大小重要吗?

wat*_*oup 5 javascript indexeddb

我即将在 indexeddb 对象存储中存储很多对象。所有对象都具有相同的结构,例如{somekey: xxx, somevalue: yyy}.

对象键的长度是否会影响存储数据的大小?例如,如果我将结构更改为{s: xxxx, v: yyyy},我是否应该期望当前浏览器在对象存储中拥有更好的足迹?

我在标准的任何地方都找不到这方面的任何信息,所以我想这取决于浏览器的实现是否在内部使用字典,我想了解它目前是如何实现的,以及它是否值得优化减少存储对象键的大小。

ale*_*ecf 1

是的,它会影响它。但至少对于大小合理的键,一个字符与 10 或 20 个字符不会对性能产生任何影响,除非规模非常大(数百万条记录)。大多数实现(包括我可以代表的chrome)确实存储了包括键名的完整对象,但索引仅存储“键路径”一次。

这意味着 {"foo": "bar"} 可能需要存储约 12 个字节(每个字符串大约 4 个字节加上一些类型信息开销,但“foo”上的后续索引将仅存储“baz”。

{"foobarbaz": "helloworld"} 可能需要约 23 个字节来存储。实际上,我希望在大多数情况下,您自己的数据应该超过密钥长度的开销,并且尝试缩短密钥以节省几个字节是不成熟的优化。