javascript变量是否有存储容量限制?
我正在设计一个YUI数据表,我从数据库中获取数据并将其存储在js对象中,无论何时需要,我将提取它并更新YUI数据表。现在在Dev我很少有记录和正确存储。在生产中我可能有1000个记录,这个js对象能够存储所有这1000个记录吗?
如果它没有能力,我将在jsp中创建隐藏的textarea并将数据存储在那里
答案 0 :(得分:13)
是的,对象和数组有存储限制。它们足够大,在大多数情况下是理论上的。 VM会比语言更受限制。
在您的特定情况下(向客户端发送数千个项目),无论是JSON,JavaScript还是JSP页面上的纯文本,您都会遇到同样的问题:客户端内存。与遇到语言限制相比,客户端更有可能耗尽可用的系统内存。对于成千上万的小物件,这不应成为问题。
Arrays have a limit of 4.2 billion items,例如the spec at 15.4.2.2中所示。这是由长度为32位计数器引起的。假设每个元素都是一个整数,那么您可以在一个数组中存储16GB的数值数据。
对象的语义更复杂,但是大多数使用对象的函数最终都使用数组,所以在大多数实际场景中你只能限制到42亿个键。同样,超过16GB的数据,不计算保留引用的开销。
VM,可能是垃圾收集器,在接近语言限制之前很久就会开始挂起。一些实现将具有较小的限制,尤其是较旧的或解释器。由于JS规范在大多数情况下没有指定最小限制,因此这些限制可能是实现定义的,并且可能要低得多(this question讨论的最大参数数量。)
有一个好的优化虚拟机试图跟踪你使用的结构,在那个大小,将导致足够的开销,VM可能会回退到使用你的对象的映射(从理论上讲,它可以定义一个结构代表那么多数据,但不是非常实用)。随着大小的增加,地图会产生少量开销,查找时间会变长,因此您会看到性能影响:只是没有任何合理的对象大小。
如果你遇到另一个限制,我怀疑它将是65k元素(2 ^ 16),as discussed in this answer。寻找支持少于65k元素的实现似乎不太可能,因为大多数浏览器是在32位架构成为常态后编写的。
答案 1 :(得分:3)
没有这样的限制。 德尔>
看起来有16GB的限制,但你可以在下面或@ ssube的答案中阅读一些测试。
但是当你的对象/ json大约是50 mb时,你会遇到奇怪的行为。
对于Json来说,这是一篇有趣的文章:http://josh.zeigler.us/technology/web-development/how-big-is-too-big-for-json/
对于Js对象,你在这里有更多的知识:javascript object max size limit(说没有这样的限制,但在~40 mb时遇到奇怪的行为)
答案 2 :(得分:0)
限制取决于浏览器的可用内存。所以每台PC,Mac,移动设置都会给你一个不同的限制。 我不知道你的记录需要多少内存,但我猜想1000条记录应该适用于大多数机器。
但:您应避免将大量数据存储在简单变量中,具体取决于记录内存,这会减慢整个网站的行为。使用普通计算机的用户可能会看到难看的滚动效果,延迟悬停效果等等。
我建议您使用本地存储空间。我很抱歉不知道YUI库,但我很确定你可以指向你的数据源的存储空间。
答案 3 :(得分:-1)
JavaScript对象max js object limit有一个限制。我建议使用的是会话对象,因为这听起来就像你试图做的那样。