Golang Go语言中 JSON 解析器性能评测

发布于 1周前 作者 h691938207 来自 Go语言

全文链接: https://github.com/json-iterator/go-benchmark

目的不是推销 json-iterator 。而是证明 json-iterator 不比其他的库更慢,从而使得大家可以把吐槽点放到其他方面:比如特性是不是齐全, api 是不是友好。重新发明 json 解析器是因为经常需要处理奇怪格式的 json ,而又不想把数据转两遍。市面上没有 api 满足我的需求的,后面我会专门写一篇 api 介绍的文章来演示 json-iterator 的独特性。( https://github.com/json-iterator/go/blob/master/README.md

测试设备

  • CPU: i7-6700K @ 4.0G
  • Level 1 cache size: 4 x 32 KB 8-way set associative instruction caches
  • Level 2 cache size: 4 x 256 KB 4-way set associative caches
  • Level 3 cache size: 8 MB 16-way set associative shared cache
  • Go: 1.8beta1

small payload

https://github.com/json-iterator/go-benchmark/blob/master/src/github.com/json-iterator/go-benchmark/benchmark_small_payload_test.go

encoding/json 在 i7-6700K 上性能还不错,但是在缓存小一些的 cpu 上性能要比这慢更多。

small

medium payload

https://github.com/json-iterator/go-benchmark/blob/master/src/github.com/json-iterator/go-benchmark/benchmark_medium_payload_test.go

json-iterator 的反射 api 也是相当快的。

medium

large payload

https://github.com/json-iterator/go-benchmark/blob/master/src/github.com/json-iterator/go-benchmark/benchmark_large_payload_test.go

jsonparser 在大部分字段不使用的时候,要快那么一丁点。

large

large file

test file used: https://github.com/json-iterator/test-data/blob/master/large-file.json

jsonparser 等其他一大票 json 解析器都是以 []byte 作为输入的,简直是为跑分而生。关于这一点 jackson 的作者也有吐槽( https://www.infoq.com/news/2014/05/jackson-founder-responds )。而 jsoniter 可以支持 io.Reader 作为输入,对于大文件处理非常友好。

large-file


Golang Go语言中 JSON 解析器性能评测

更多关于Golang Go语言中 JSON 解析器性能评测的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

好不容易看到个写 go 的 顶一下呢

更多关于Golang Go语言中 JSON 解析器性能评测的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang(Go语言)中,JSON解析器的性能评测是一个备受关注的话题。Go语言内置了强大的encoding/json包,它提供了高效的JSON编解码功能。以下是对Go语言JSON解析器性能的一些关键点评测:

  1. 高性能:Go语言的encoding/json包经过高度优化,在处理大规模JSON数据时表现出色。其性能通常优于许多其他语言的内置JSON库。

  2. 流式解析:对于非常大的JSON数据,Go语言支持流式解析,允许逐步读取和处理数据,而不需要一次性将整个文档加载到内存中。这大大提高了处理大型JSON文件时的内存效率和性能。

  3. 并发处理:Go语言的并发模型(goroutines和channels)使得可以高效地并行处理JSON数据。通过分配多个goroutines来解析和处理JSON的不同部分,可以显著缩短处理时间。

  4. 自定义解析器:虽然encoding/json包已经足够强大,但在某些特定场景下,开发者可能需要自定义解析器以进一步优化性能。Go语言的灵活性和底层控制使得这成为可能。

  5. 基准测试:为了准确评测JSON解析器的性能,建议使用Go语言的基准测试工具(go test -bench)。这可以帮助开发者在不同的数据集和条件下,客观地评估和优化JSON解析器的性能。

综上所述,Go语言的JSON解析器在性能上表现出色,并提供了多种优化手段以满足不同场景的需求。通过合理的使用和优化,开发者可以充分发挥Go语言在处理JSON数据方面的优势。

回到顶部