为了账号安全,请及时绑定邮箱和手机立即绑定

Go vs JavaScript JSON 解析

Go vs JavaScript JSON 解析

Go
九州编程 2021-06-17 18:09:42
最近,我需要解析 Chrome 网络浏览器在其开发工具中记录事件时生成的 JSON,并从中获取一些计时数据。Chrome 可以在很短的时间内产生相当大的数据量,所以我最初构建的 Ruby 解析器非常慢。由于我正在学习 Go,因此我决定同时使用 Go 和 JavaScript/Node 编写脚本并进行比较。JSON 文件的最简单形式就是我在这个 Gist 中所拥有的。它包含一个表示为获取页面而发送的请求的事件,以及表示响应的事件。通常情况下,有一个巨大的额外数据中进行筛选的量。这是它自己的问题,但不是我在这个问题中担心的问题。我写的 JavaScript 脚本在这里,我写的 Go 程序在这里。这是我用 Go 写的第一个有用的东西,所以我敢肯定它很糟糕。然而,有一两件事我注意到的是它的很多不是JavaScript慢在解析较大的JSON文件。在 Go 中使用 119Mb JSON 文件的时间:$ time ./parse data.json= 22 Requests  Min Time:      0.77  Max Time:      0.77  Average Time:  0.77./gm data.json  4.54s user 0.16s system 99% cpu 4.705 total在 JavaScript/Node 中使用 119Mb JSON 文件的时间:$ time node parse.js data.json= 22 Requests  Min Time: 0.77  Max Time: 0.77  Avg Time: 0.77node jm.js data.json  1.73s user 0.24s system 100% cpu 1.959 total(本例中的最小/最大/平均时间都相同,因为我复制了 JSON 对象以获得非常大的数据集,但这无关紧要。)我很好奇是否只是 JavaScript/Node 在解析 JSON 时速度更快(我猜这不会特别令人惊讶),或者我在 Go 程序中做错了什么。我也很好奇我在 Go 程序中做错了什么,因为我确信它有很多错误。请注意,虽然这两个脚本不仅仅是解析,但在 Go 中肯定会 json.Unmarshal()在程序中增加大量时间。
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

使用 Go,您将 JSON 解析为静态类型结构。使用 JS 和 Ruby,您将其解析为哈希表。

为了将 JSON 解析为您定义的结构,json 包需要找出其字段的名称和类型。为此,它使用了反射包,这比直接访问这些字段要慢得多。

根据您解析数据后对数据的处理方式,额外的解析时间可能会物有所值。Go 数据结构比哈希表使用更少的内存,并且访问速度更快。因此,如果您对数据进行大量处理,则节省的处理时间可能会超过额外的解析时间。


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信