首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用Node.js的JSON中,字符串的大小有限制吗?

在使用Node.js的JSON中,字符串的大小有限制吗?
EN

Stack Overflow用户
提问于 2014-06-11 11:04:45
回答 3查看 51.8K关注 0票数 34

我的Node.js应用程序的一部分涉及从用户接收一个字符串作为输入,并将其存储在一个JSON文件中。JSON本身显然对此没有限制,但是Node可以处理成JSON的文本数量有上限吗?

请注意,我没有使用MongoDB或任何其他技术进行实际插入-这是本机字符串化,并使用fs保存到.json文件。

EN

回答 3

Stack Overflow用户

发布于 2014-06-11 11:27:35

"vanilla“nodeJS (v0.10.28)中的最大字符串大小约为1 1GB。

如果您很着急,您可以使用自加倍字符串测试支持的最大字符串大小。测试的系统有8 8GB的RAM,大部分是未使用的。

代码语言:javascript
复制
x = 'x';
while (1){ 
     x = ''+x+x; // string context
     console.log(x.length);
}

2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
FATAL ERROR: JS Allocation failed - process out of memory
Aborted (core dumped)

在另一个测试中,我使用for循环一次一个字符达到了1,000,000,000。

现在,评论家可能会说,“等等,JSON呢?问题是关于JSON的!”我要说的是,JAVASCRIPT中没有JSON对象,JS类型有Object、Array、String、Number等。由于JSON是一个字符串表示,这个问题可以归结为允许的最长字符串。但为了仔细检查,让我们添加一个JSON.stringify调用来处理JSON转换。

代码

代码语言:javascript
复制
x = 'x';
while (1){ 
     x = ''+x+x; // string context
     console.log(JSON.stringify({a:x}).length);
}

期望: JSON字符串的大小将从2开始,因为第一个对象将字符串表示为'{"a":"xx"}‘,持续10个字符。在属性a中的x字符串变得更大之前,它不会开始加倍。它可能会在2.56亿左右失败,因为它可能会在字符串化中复制第二个副本。回想一下,字符串化独立于原始对象。

结果:

代码语言:javascript
复制
10
12
16
24
40
72
136
264
520
1032
2056
4104
8200
16392
32776
65544
131080
262152
524296
1048584
2097160
4194312
8388616
16777224
33554440
67108872
134217736
268435464

和预期的差不多……

现在这些限制可能与在nodeJS项目中实现JS的C/C++代码有关,此时我相信这与Chrome浏览器中使用的V8代码是相同的。

博客文章中有证据表明,人们重新编译nodeJS以绕过旧版本的内存限制。还有许多nodejs命令行开关。我还没有测试过这一切的效果。

票数 10
EN

Stack Overflow用户

发布于 2020-02-21 08:03:35

node.js中字符串的最大长度是由底层的Javascript引擎"V8“定义的。在V8中,最大长度与堆大小无关。字符串的大小实际上受到优化对象布局定义的限制的约束。参见https://chromium-review.googlesource.com/c/v8/v8/+/2030916,这是最近(2020年2月)对V8中字符串的最大长度的更改。提交消息解释了随时间变化的不同长度。限制从大约256MB到1 1GB,然后又回到512MB (在64位V8平台上)。

票数 3
EN

Stack Overflow用户

发布于 2014-06-11 11:34:12

这是一个很好的问题,但我认为您需要担心的上限不涉及最大JSON字符串大小。

在我看来,您需要担心的限制是,当请求线程处理用户的请求时,您希望阻塞请求线程多长时间。

任何超过1MB的字符串大小都会花费用户几秒钟的时间来上传,10兆字节的字符串可能需要几分钟的时间。收到请求后,服务器需要几百毫秒到几秒的时间来解析成数据结构,这会导致非常差的用户体验(解析JSON非常昂贵)

带宽和服务器处理时间将掩盖JSON对字符串大小的任何限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24153996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档