]> Cypherpunks repositories - gostls13.git/commit
encoding/json: faster encoding
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 9 Aug 2013 16:46:47 +0000 (09:46 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 9 Aug 2013 16:46:47 +0000 (09:46 -0700)
commit89b5c6c0af854c53ba16da8bc8394853e04e6bb0
tree1baf39c6b22f3ad7f85a7e9715926a9403182242
parentba6cf63cba611d8d4602781bd8abf5bade2af3ca
encoding/json: faster encoding

The old code was caching per-type struct field info. Instead,
cache type-specific encoding funcs, tailored for that
particular type to avoid unnecessary reflection at runtime.
Once the machine is built once, future encodings of that type
just run the func.

benchmark               old ns/op    new ns/op    delta
BenchmarkCodeEncoder     48424939     36975320  -23.64%

benchmark                old MB/s     new MB/s  speedup
BenchmarkCodeEncoder        40.07        52.48    1.31x

Additionally, the numbers seem stable now at ~52 MB/s, whereas
the numbers for the old code were all over the place: 11 MB/s,
40 MB/s, 13 MB/s, 39 MB/s, etc.  In the benchmark above I compared
against the best I saw the old code do.

R=rsc, adg
CC=gobot, golang-dev, r
https://golang.org/cl/9129044
src/pkg/encoding/json/decode_test.go
src/pkg/encoding/json/encode.go