提问人:Lance 提问时间:11/9/2023 最后编辑:Lance 更新时间:11/11/2023 访问量:76
如何在JavaScript中粗略测量对象大小?
How to measure object size roughly in JavaScript?
问:
背景
我正在努力将一个包含大约 50 个不同表的 SQL 数据库导出到一组 JSON 文件中,我可以在 GitHub 上发布这些文件,以便其他人可以轻松地使用数据引导他们的项目。他们所需要做的就是读取 JSON 文件,随心所欲地修改,然后插入到他们自己的数据库中。
问题是,你不能有非常大的字符串作为JSON文件,因为Node.js对参数大小或字符串大小有限制(我忘记了)。所以在我看来,将内容分成一组JSON文件,然后解释你需要匹配文件夹中的文件才能得到JSON,就像这样。JSON.parse
glob
./data/**/*.json
我曾想过只发布一个SQL数据库,但我讨厌开放数据项目这样做。现实情况是,他们的 SQL 格式与您的格式不匹配,因此您需要最终将其序列化为 JSON 或类似的东西,最终从他们的 SQL 数据库将其转换为您的 SQL/NoSQL/GraphDB 格式,这只是一种痛苦的经历。而且 db dump 通常是二进制格式,因此它根本不是人类可读的。有时你只是想看一下数据来了解它,而拥有 JSON 是很好的选择。在我的书中,任何二进制文件都不能使用 git。每次提交更改了 1 个“值”的新二进制文件时,它都会分解 git 历史记录,等等。
我想过 CSV,但它是大量导出的树状结构数据。
其中一条评论建议使用 JSON 行分隔的流,这是个好主意,但处理 JSON 流比 glob 加载一堆文件 IMO 要复杂得多,而且文件实际上不能解析为 JSON,这通常是混淆的根源。所以可能会避免这种情况。.json
就我而言,我只需要注意数据列表上的 JSON 文件大小,而不是单个记录。
数据是“简单”树数据,因为没有循环依赖关系。
问题
有哪些启发式方法可以测量 JavaScript 对象的大小?May 的主要目标是限制生成的 JSON 文件大小的大小,使其字符串看起来小于 256 MB。我的意思是,每次向数组添加新属性或项时,我都可以这样做,但这会不断序列化一个每一步都在增长的字符串,这会很慢。Buffer.byteLength(JSON.stringify(obj), 'utf8')
还有哪些其他方法可以使这在构造内存中对象时成为测量 JSON 字符串大小的一种干净的方法?也许只是做这样的事情来向你的对象添加属性?
let totalSize = 0;
function addProperty(obj, name, value) {
totalSize += 2 + name.length; // 2 for qoutes on each side
// this is just for string,
// would have to test on all types.
totalSize += 2 + value.length;
obj[name] = value
}
想知道是否已经有一个库来解决这个问题,或者有一套既定的模式来解决这个问题,或者我从那里开始的东西是否有意义。对这方面的任何想法持开放态度。
它不一定是完美的,即使估计高端的尺寸也可以。
我想只是对每个项目做一个相对快速的操作,并将其添加到运行总数中,将意味着我们不会超过两次,我认为这已经足够快了。如果我真的想要,我可以逐步构建 JSON 字符串,一次一个列表项,嗯,也许这会起作用。但在这一点上,这是一种过度优化,可能字符串化两次就可以了。JSON.stringify(listItem, null, 2)
还有哪些其他有益的方法?计算 JSON 对象大小,使其不会超过最大值。老实说,我可能会将每个文件限制在 8mb 左右。
答: 暂无答案
评论