javascript - Node.js 中 JSON 字符串的大小是否有限制?

标签 javascript json node.js

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

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

最佳答案

V8(JavaScript 引擎 Node 构建于其之上),直到非常最近有了 hard limit on heap size of about 1.9 GB .

由于破坏了 native 插件的 V8 API 更改,Node v0.10 停留在旧版本的 V8 (3.14) 上。 Node 0.12 将更新到最新的 V8 (3.26),这将破坏许多 native 模块,但为提高 1.9 GB 堆限制打开了大门。

就目前情况而言,单个 Node 进程最多可以保存不超过 1.9 GB 的 JavaScript 代码、对象、字符串等组合。这意味着字符串的最大长度低于 1.9 GB。

可以通过使用Buffer来解决这个问题,它存储V8堆之外的数据(但仍在进程的堆中)。只要 JavaScript 变量中的数据不超过 1.9 GB,64 位版本的 Node 几乎可以填满您的所有 RAM。

<小时/>

尽管如此,您永远不应该接近这个限制。处理这么多数据时,您必须将其作为流处理。内存中的内存永远不应该超过几兆字节(最多)。好消息是 Node 特别适合处理流数据。

你应该问自己一些问题:

  • 您实际上从用户那里收到了哪些类型的数据?
  • 为什么要以 JSON 格式存储?
  • 将千兆字节填充到 JSON 中真的是个好主意吗? (答案是否定的。)
  • 数据存储后会怎样?你的代码会读取它吗?还有别的事吗?

您发布的问题实际上对于您实际想要完成的任务来说相当模糊。如需更具体的建议,请使用更多信息更新您的问题。

如果您希望数据永远不会那么大,只需对输入设置 10 MB 或其他大小的合理限制,全部缓冲,然后使用 JSON.stringify

如果您希望处理更大的数据,则需要将输入直接流式传输到磁盘。查看transform streams如果您需要在数据写入磁盘之前处理/修改数据。例如有modules that deal with streaming JSON .

关于javascript - Node.js 中 JSON 字符串的大小是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45459332/

相关文章:

javascript - 将输入限制为某种模式

javascript - 使用 if 来检测使用 jQuery 的类

javascript - 从 Flask 后端 react axios GET 空数据

java - 如何使用java代码在 Assets 中动态创建JSON文件或在android中使用java代码更新现有的json文件

node.js - Rollup 不捆绑声明文件

javascript - 处理重叠 SVG 图层中的鼠标事件

javascript - 如何通过 json 设置 AngularJS $routeProvider 的路由

c# - 如何在自定义 session 状态提供程序中将 session 数据转换为 SessionStateStoreData 类型

node.js - 如何关闭两个mongodb与 Node 的连接

javascript - 定位对应的未经过V8优化的JS代码源