javascript变量有存储容量限制吗?
我正在设计一个YUI datatable,我从数据库中获取数据并将其存储在js对象中,然后在需要的地方提取数据并更新YUI datatable。现在在Dev中,我只有很少的记录,并且它的存储是正确的。在生产中,我可能有1000条记录,这个js对象能够存储所有这些1000条记录吗?
如果不能,我将在jsp中的隐藏文本区域上创建,并将数据存储在那里
发布于 2015-05-12 22:45:18
是的,对象和数组有存储限制。它们足够大,对于大多数目的来说,都是理论上的。您将更多地受到VM的限制,而不是语言。
在您的特定情况下(向客户端发送数千个项目),无论是JSON、JavaScript还是JSP页面上的纯文本,您都将遇到相同的问题:客户端内存。与您遇到语言限制相比,客户端更有可能耗尽可用的系统内存。对于数以千计的小对象来说,这应该不是问题。
例如,在the spec at 15.4.2.2中显示的Arrays have a limit of 4.2 billion items。这是由于长度为32位计数器造成的。假设每个元素都是一个整数,那么就可以在一个数组中存储16 in的数字数据。
对象的语义更复杂,但大多数处理对象的函数最终都使用数组,因此在大多数实际场景中,您只能使用42亿个键。同样,这是超过16 to的数据,不包括保存引用的开销。
VM,可能还有垃圾收集器,在你达到语言的极限之前,会挂起很长一段时间。一些实现将有较小的限制,特别是较旧的或解释器。由于JS规范在大多数情况下没有指定最小限制,因此这些限制可能是由实现定义的,而且可能会低得多(this question on the maximum number of arguments讨论了这一点)。
使用一个好的优化VM来跟踪您使用的结构,在这种大小下,将导致足够的开销,使得VM可能会重新为您的对象使用映射(理论上可以定义一个表示那么多数据的结构,但不是非常实用)。映射的开销很小,并且查找时间随着大小的增加而变长,因此您将看到性能方面的影响:只是不是在任何合理的对象大小下。
如果你遇到另一个限制,我怀疑它将是65k元素(2^16),as discussed in this answer。找到一个支持少于65k元素的实现似乎不太可能,因为大多数浏览器都是在32位体系结构成为标准之后编写的。
发布于 2015-05-12 23:01:07
限制取决于浏览器的可用内存。所以每个PC,Mac,Mobile设置都会给你一个不同的限制。我不知道你的一条记录需要多少内存,但我猜1000条记录应该可以在大多数机器上工作。
但:你应该避免在简单的变量中存储大量的数据量,这取决于记录内存,这会减慢整个网站的行为。使用普通计算机的用户可能会看到丑陋的滚动效果、延迟的悬停效果等。
我建议您使用本地存储。很抱歉,我不知道YUI库,但我非常确定您可以指向您的datatable源代码的存储位置。
发布于 2015-05-12 22:46:21
JavaScript对象max js object limit是有限制的。我建议使用session对象,因为这听起来像是您想要做的事情。
https://stackoverflow.com/questions/30194088
复制相似问题