3 ms·
Someone made a benchmark of serialization libraries in go [1], and I was surprised to see gobs is one of the slowest ones, specially for decoding. I suspect par
by emmanueloga_ 3y ago
Someone made a benchmark of serialization libraries in go [1], and I was surprised to see gobs is one of the slowest ones, specially for decoding. I suspect part of the reason is that the API doesn't not allow reusing decoders [2]. From my explorations it seems like both JSON [3], message-pack [4] and CBOR [5] are better alternatives.
By the way, in Go there are a like a million JSON encoders because a lot of things in the std library are not really coded for maximum performance but more for easy of usage, it seems. Perhaps this is the right balance for certain things (ex: the http library, see [6]).
There are also a bunch of libraries that allow you to modify a JSON file "in place", without having to fully deserialize into structs (ex: GJSON/SJSON [7] [8]). This sounds very convenient and more efficient that fully de/serializing if we just need to change the data a little.
--
1: https://github.com/alecthomas/go_serialization_benchmarks https://github.com/alecthomas/go_serialization_benchmarks
2: https://github.com/golang/go/issues/29766#issuecomment-454926474 https://github.com/golang/go/issues/29766#issuecomment-45492...
--
3: https://github.com/goccy/go-json https://github.com/goccy/go-json
4: https://github.com/vmihailenco/msgpack https://github.com/vmihailenco/msgpack
5: https://github.com/fxamacker/cbor https://github.com/fxamacker/cbor
--
6: https://github.com/valyala/fasthttp#faq https://github.com/valyala/fasthttp#faq
--
7: https://github.com/tidwall/gjson https://github.com/tidwall/gjson
8: https://github.com/tidwall/sjson https://github.com/tidwall/sjson