pyList

关于go json 的性能效率问题

go 标准库的json 解析很慢,其它推荐:

##ffjson

faster JSON serialization for Go

https://github.com/pquerna/ffjson 14

https://journal.paul.querna.org/articles/2014/03/31/ffjson-faster-json-in-go/ 7

megajson

A JSON parser generator for high performance encoding and decoding in Go.

https://github.com/benbjohnson/megajson 9

go-ujson

python 的ujson 都熟悉

a pure Go port of ultrajson

https://github.com/mreiferson/go-ujson 11

go-ujson

A pure Go port of https://github.com/esnme/ultrajson 1 with a https://github.com/bitly/go-simplejson 1 like interface.

$ go test -bench ".*"
PASS
BenchmarkUjson    500000          4970 ns/op      20.12 MB/s
BenchmarkStdLib   200000         10323 ns/op       9.69 MB/s

WARNING: very early stages of a public API

而python 对json 的解析就快得多,且跟python 数据结构完美融合

http://www.pylist.com/topic/1434431724 4

go 1.4.2

标准库 loads  121.017531ms
go-ujson loads  63.217203ms
simplejson loads  90.202043ms
标准库 dumps  88.908435ms

python 2.7.3

simplejson
Loads Taken 14.655828476ms
Dumps Taken 28.5069942474ms

ujson
Loads Taken 12.7279758453
Dumps Taken 13.9889717102

json
Loads Taken 36.0250473022
Dumps Taken 23.5030651093
从结果上上来看, MessagePack , gogo/protobuf ,和 flatbuffers 差不多,这三个优秀的库在序列化和反序列化上各有千秋,而且都是跨语言的。
从便利性上来讲,你可以选择 MessagePack 和 gogo/protobuf 都可以,两者都有大厂在用。
flatbuffers 有点反人类,因为它的操作很底层,而且从结果上来看,序列化的性能要差一点。但是它有一个好处,那就是如果你只需要特定的字段,
你无须将所有的字段都反序列化。从结果上看,不反序列化字段每个调用只用了9.54纳秒,这是因为字段只有在被访问的时候才从byte数组转化为相应的类型。
因此在特殊的场景下,它可以提高N被的性能。但是序列化的代码的面相太难看了。

http://colobu.com/2015/09/28/Golang-Serializer-Benchmark-Comparison/ 1

python 和 go:

py ujson > go msgpack x 2
py ujson > go json x 5
py json < go json x 2

《golang msgpack 和 json 性能的简单比较》 http://www.golangnote.com/topic/105.html 7

本文网址: https://pylist.com/t/1433861179 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
Be the first to comment!
Captcha image
Relative Articles