[英]What is the best way to include huge json into node.js script?
如何将巨大的json文件(550MB)包含到node.js脚本中?
我试过了:
var json = require('./huge-data-set.json')
使用增加的--max-old-space-size参数执行脚本
node --max-old-space-size=4096 diff.js
它失败了:
buffer.js:500
throw new Error('"toString()" failed');
^
Error: "toString()" failed
at Buffer.toString (buffer.js:500:11)
at Object.fs.readFileSync (fs.js:552:33)
at Object.Module._extensions..json (module.js:556:20)
Node的后面是实现JS实现的v8引擎。 V8是用C ++编写的,因此它使用类型将其字符保存在字符串中(讽刺用法在此谨慎使用) 。
根据ECMA的规定,JavaScript将每个字符存储在两个字节上(utf16编码)。
字符串类型是零个或多个16位无符号整数值(“元素”)的所有有序序列的集合,最大长度为2 ^ 53-1个元素
因此,您遇到的不是内存不足限制,而是失败的操作,因为字符串大于字符串类型的字节大小。
如果您尝试用JavaScript编写json对象而不是从fs中读取(通过要求),则将出现内存不足异常,因为已设置了限制以防止此类情况发生。
出现错误是因为您试图创建一个太大的(单个)字符串。
一些可能的解决方案:
JSON.parse()
,然后继续进行下一行。 但是,如果解析的JavaScript值占用太多空间,您仍然可能会遇到内存/ GC问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.