javascript变量有存储限制吗?

Aja*_*y G 13 javascript variables yui yui-datatable

javascript变量是否有存储容量限制?

我正在设计一个YUI数据表,我从数据库中获取数据并将其存储在js对象中,无论何时需要,我将提取它并更新YUI数据表.现在在Dev我很少有记录和正确存储.在生产中我可能有1000个记录,这个js对象能够存储所有这1000个记录吗?

如果它没有能力我将在jsp中创建隐藏的textarea并将数据存储在那里

ssu*_*ube 16

是的,对象和数组有存储限制.它们足够大,在大多数情况下是理论上的.VM将比语言更受限制.

在您的特定情况下(向客户端发送数千个项目),您将遇到相同的问题,无论是JSON,JavaScript还是JSP页面上的纯文本:客户端内存.与遇到语言限制相比,客户端更有可能耗尽可用的系统内存.对于数以千计的小物件,这应该不是问题.

例如,数组的限制为42亿个项目,如15.4.2.2的规范所示.这是由长度为32位计数器引起的.假设每个元素都是一个整数,则允许您在单个数组中存储16GB的数字数据.

对象的语义更复杂,但是大多数使用对象的函数最终都使用数组,所以在大多数实际场景中你只能使用42亿个键.再次,这超过16GB的数据,不计入保留引用的开销.

VM,可能还有垃圾收集器,在你接近语言的极限之前就会开始长时间挂起.一些实现将具有较小的限制,尤其是较旧的或解释器.由于JS规范在大多数情况下没有指定最小限制,因此可能是实现定义的并且可能要低得多(关于最大参数数量的这个问题讨论了这个问题).

有一个好的优化虚拟机试图跟踪你使用的结构,在那个大小,将导致足够的开销,VM可能会回退到使用你的对象的映射(理论上可以定义一个代表那么多数据的结构,但不是非常实用).随着大小的增加,地图会产生少量开销,查找时间会变长,因此您会看到性能影响:只是没有任何合理的对象大小.

如果你遇到另一个限制,我怀疑它将是65k元素(2 ^ 16),如本答案所述.寻找支持少于65k元素的实现似乎不太可能,因为大多数浏览器是在32位架构成为常态之后编写的.


Raz*_*tru 5

没有这样的限制。

看起来有 16GB 的限制,但您可以阅读下面或@ssube 的答案中的一些测试。

但是可能当您的对象/json 大约为 50 mb 时,您会遇到奇怪的行为。

对于 Json,这是一篇有趣的文章:http : //josh.zeigler.us/technology/web-development/how-big-is-too-big-for-json/

对于 Js Object,您在这里有更多知识:javascript object max size limit(说没有这样的限制,但在 ~40 mb 时遇到奇怪的行为)