• Brad Fitzpatrick's avatar
    encoding/json: faster encoding · 89b5c6c0
    Brad Fitzpatrick authored
    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
    89b5c6c0
encode.go 26.6 KB