【问题标题】:Find JSON object size without parsing it to string查找 JSON 对象大小而不将其解析为字符串
【发布时间】:2019-06-17 03:51:00
【问题描述】:

我知道我可以使用 JSON.parse(data).length 来获取 JSON 对象的大小(以字节为单位)。
//UTF-8 等暂时可以忽略,但是对于我不想要的大量数据,解析需要时间。

有什么方法可以在不将其转换为字符串的情况下以 MB 为单位获取其大小?

【问题讨论】:

  • get size of json object的可能重复
  • “大小”是什么意思,你想知道什么?对象的元素数量?
  • 不,这不是重复的,我想知道以 MB 为单位保存这个对象需要多少内存
  • @Arvind 如果我的回答对您有用,您可以接受或限定它,以便其他有类似问题的用户可以更快地找到解决方案。

标签: javascript jquery node.js json


【解决方案1】:

在 Javascript 中没有计算对象大小的本地方法,但是有一个节点模块可以为您提供以字节为单位的对象大小。 object-sizeof

这将是您需要的示例:  

var sizeof = require('object-sizeof');

// 2B per character, 6 chars total => 12B

console.log(`${sizeof({abc: 'def'})/1024} MB`);

【讨论】:

    【解决方案2】:

    出于安全原因,不允许 Javascript 访问或更改有关设备的信息,因此,应该无法准确确定对象占用的字节数。

    话虽如此,以下 Javascript 命令确实存在(仅在 chrome 中):

    window.performance.memory
    

    这将返回一个对象,其中包含窗口最多可以使用的字节数、已使用的字节数(包括可用空间)以及实际使用的字节数。从理论上讲,您可以使用它来确定创建对象之前和之后使用的字节数,并计算差异。例如The memory-stats project 使用该命令。

    但是,除非使用“--enable-precise-memory-info”标志启动 chrome,否则此对象中的值永远不会改变。因此,您不能在(生产)应用程序中使用此命令(MDN 文档指出the same)。您只能通过计算所有字符串和数字并将其乘以字符串通常占用的字节数(object-sizeof 库就是这样做的)来计算对象占用的内存量。

    如果您只对对象的大小感兴趣并且不希望在生产应用中使用该信息,您可以通过在 Chrome 开发工具中创建 timeline recording 来实现。

    【讨论】:

      【解决方案3】:

      我们有下一个选择:

      • 像 object-sizeof 库这样的循环计算
      • 对象到字符串/缓冲区:
        1. JSON.stringify({a:1}).length
        2. v8.serialize({a:1}).length

      【讨论】:

        猜你喜欢
        • 2015-07-14
        • 2011-10-29
        • 2013-03-12
        • 1970-01-01
        • 2019-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多