]> Cypherpunks repositories - gostls13.git/commit
encoding/json: defer error context work until necessary
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 8 Jul 2018 12:17:56 +0000 (13:17 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Tue, 21 Aug 2018 18:18:59 +0000 (18:18 +0000)
commit9a2a34e1c1be53fce0782a0b5e14e6f7ceaad62a
treea3dd4e2f7fed8d8909e514dc33af13ea758ecda9
parent4a842f25590fca15a8c564ec6a8edfd9f71bc446
encoding/json: defer error context work until necessary

Calling Name on a reflect.Type is somewhat expensive, as it involves a
number of nested calls and string handling.

This cost was showing up when decoding structs, as we were calling it to
set up an error context.

We can avoid the extra work unless we do encounter an error, which makes
decoding via struct types faster.

name           old time/op    new time/op    delta
CodeDecoder-4    31.0ms ± 1%    29.9ms ± 1%  -3.69%  (p=0.002 n=6+6)

name           old speed      new speed      delta
CodeDecoder-4  62.6MB/s ± 1%  65.0MB/s ± 1%  +3.83%  (p=0.002 n=6+6)

Updates #5683.

Change-Id: I48a3a85ef0ba96f524b7c3e9096cb2c4589e077a
Reviewed-on: https://go-review.googlesource.com/122467
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/encoding/json/decode.go