javascript变量有存储容量限制吗?
我正在设计一个 YUI 数据表,我从数据库中获取数据并将其存储在 js 对象中,在需要的地方我将提取它并更新 YUI 数据表。现在在 Dev 中我只有很少的记录并且它的存储正确。在生产中我可能有1000条记录,这个js对象能够存储所有这1000条记录吗?
如果它不可用,我将在 jsp 中创建隐藏文本区域并将数据存储在那里
最佳答案
是的,对象和数组有存储限制。它们足够大,对于大多数目的来说,都是理论上的。与语言相比,VM 对您的限制更大。
在您的特定情况下(向客户端发送数千个项目),无论是 JSON、JavaScript 还是 JSP 页面上的纯文本,您都会遇到相同的问题:客户端内存。与您遇到语言限制相比,客户端用完可用系统内存的可能性要大得多。对于数以千计的小对象,这应该不是问题。
Arrays have a limit of 4.2 billion items , 如图所示 the spec at 15.4.2.2 , 例如。这是由于长度是 32 位计数器造成的。假设每个元素都是一个整数,那么您可以在一个数组中存储 16GB 的数字数据。
对象的语义更为复杂,但大多数处理对象的函数最终都使用数组,因此在大多数实际场景中,您只能使用 42 亿个键。同样,这超过 16GB 的数据,还不包括保留引用的开销。
虚拟机,可能还有垃圾收集器,在您接近语言限制之前就会开始长时间挂起。一些实现会有较小的限制,尤其是较旧的或解释器。由于 JS 规范在大多数情况下没有指定最小限制,因此这些限制可能是实现定义的并且可能要低得多(关于最大参数数量的 this question 对此进行了讨论)。
有了一个良好的优化 VM,它会尝试跟踪您使用的结构,在该大小下,将导致足够的开销,以至于 VM 可能会回退到为您的对象使用映射(理论上可以定义一个表示那么多数据的结构,但不是很实用)。 map 有少量开销,并且随着大小的增加,查找时间会变长,因此您会看到性能影响:只是不是任何合理的对象大小。
如果您遇到另一个限制,我怀疑它将是 65k 个元素 (2^16),as discussed in this answer .找到一个支持少于 65k 元素的实现似乎不太可能,因为大多数浏览器都是在 32 位架构成为常态之后编写的。
关于javascript - javascript变量有存储限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194088/