JavaScript中的对象包含键值对。典型对的成本(使用DevTools Profiler)是对密钥名称,8个字节和对象成本的引用:小字节为4个字节,数字为8个字节,引用等。
密钥的成本加起来,特别是在拥有数百万个对象的数组中。
是否有一种asm.js方法可以为相同对象的数组使用类型化数组?
是的,我知道这似乎很痛苦,但对于某个特定项目,这可能是必需的。
我正在考虑的那种方法是使用模板JS对象,其中的键描述了每个键值的类型化数组的偏移量及其类型。对于这些对象的数组,这些对象跨度中有多个。
因此有两个问题:
1 - 我的假设是否正确..并且Chrome /现代浏览器中没有优化关键成本的优化?可能会使用限制:http://www.2ality.com/2013/08/protecting-objects.html
2 - 如果是这样,是否有一个用于处理类型化数组作为对象的库?或者任何文章或要塞等?
答案 0 :(得分:1)
如果您拥有数百万个对象,所有对象都具有相同的已知密钥集,并且您有很多对象,那么内存是个问题,那么您可能根本不希望将数据存储为javascript对象。
您可能希望将此视为数据库问题。你想要:
例如,如果您有七个键(例如字段),其中三个是数字,四个是字符串,其中一个数字是您的查找键,那么您可以这样做:
当您阅读数据时,可能来自多个ajax调用,您可以执行以下操作:
现在您拥有半紧凑的存储格式和密钥查找方式。如果要查找值,请使用主密钥查找对象。键的值将是记录号,它是其他数组的索引。您可以创建两个函数来查找记录并返回记录的javascript对象形式(对象上的键/值对中的所有数据)和另一个将写入对象的函数(可能已更改=但主密钥可以不要改回你的存储格式。
这对您的数据做了一些假设,即您有一个主密钥不会改变您用于查找的主密钥,并且您可以找到一个分隔符将所有字符串值绑定在一起,然后将它们分开,然后将它们分开你可以知道什么时候去存储所有这些,并且知道键是什么,并且对象通常都具有相同的键。
如果这些假设中的任何一个都不正确,那么设计就必须进行调整以处理它,但希望你能想到使用除了巨大的对象之外的东西来存储你的数据然后构成一个给定的仅当您需要处理该记录的数据时才对象。