Descriptionencoding/json: improve performance of Unmarshal on primitive types
Skip most of the scanning and parsing logic for simple (non-object/array) JSON values.
benchmark old ns/op new ns/op delta
BenchmarkUnmarshalInt 948 436 -54.01%
BenchmarkUnmarshalUint 930 427 -54.09%
BenchmarkUnmarshalString 1407 715 -49.18%
BenchmarkUnmarshalFloat 1114 536 -51.89%
BenchmarkUnmarshalBool 759 266 -64.95%
BenchmarkUnmarshalStruct 8165 8181 +0.20%
No significant effects on the go1 benchmarks:
benchmark old ns/op new ns/op delta
BenchmarkBinaryTree17 9647362752 9596196417 -0.53%
BenchmarkFannkuch11 5623613048 5518694872 -1.87%
BenchmarkGobDecode 32944041 33165434 +0.67%
BenchmarkGobEncode 21237482 21080554 -0.74%
BenchmarkGzip 750955920 749861980 -0.15%
BenchmarkGunzip 197369742 197886192 +0.26%
BenchmarkJSONEncode 79274091 78891137 -0.48%
BenchmarkJSONDecode 180257802 175280358 -2.76%
BenchmarkMandelbrot200 7396666 7388266 -0.11%
BenchmarkParse 11446460 11386550 -0.52%
BenchmarkRevcomp 1605152523 1599512029 -0.35%
BenchmarkTemplate 204538247 207765574 +1.58%
benchmark old MB/s new MB/s speedup
BenchmarkGobDecode 23.30 23.14 0.99x
BenchmarkGobEncode 36.14 36.41 1.01x
BenchmarkGzip 25.84 25.88 1.00x
BenchmarkGunzip 98.32 98.06 1.00x
BenchmarkJSONEncode 24.48 24.60 1.00x
BenchmarkJSONDecode 10.76 11.07 1.03x
BenchmarkParse 5.06 5.09 1.01x
BenchmarkRevcomp 158.34 158.90 1.00x
BenchmarkTemplate 9.49 9.34 0.98x
Fixes issue 3949.
Patch Set 1 #Patch Set 2 : diff -r 8bbc0bdf832e https://code.google.com/p/go #Patch Set 3 : diff -r 8bbc0bdf832e https://code.google.com/p/go #
Total comments: 4
Patch Set 4 : diff -r 8bbc0bdf832e https://code.google.com/p/go #Patch Set 5 : diff -r fe640aeda5f2 https://code.google.com/p/go #Patch Set 6 : diff -r fe640aeda5f2 https://code.google.com/p/go #
Total comments: 2
Patch Set 7 : diff -r fe640aeda5f2 https://code.google.com/p/go #MessagesTotal messages: 15
|