Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove intermediary reader and directly feed iterator for unmarshal #626

Merged
merged 1 commit into from
Nov 26, 2020

Conversation

markusthoemmes
Copy link
Contributor

When not streaming the data, we might as well just use jsoniter's pools as intended and feed the iterator with the ready-to-go byte slice directly.
Kept the reader interface intact for enhancements on the streaming side.

Signed-off-by: Markus Thömmes markusthoemmes@me.com

Benchmark

benchmark                                                                                       old ns/op     new ns/op     delta
BenchmarkUnmarshal/struct_data_v0.3-16                                                          17204         16991         -1.24%
BenchmarkUnmarshal/data,_attributes_and_extensions_and_specversion_with_struct_data_v0.3-16     17956         18042         +0.48%
BenchmarkUnmarshal/data,_attributes_and_extensions_and_specversion_with_struct_data_v1.0-16     18128         17969         -0.88%
BenchmarkUnmarshal/string_data_v1.0-16                                                          16832         16925         +0.55%
BenchmarkUnmarshal/nil_data_v1.0-16                                                             16021         16136         +0.72%
BenchmarkUnmarshal/string_data_v0.3-16                                                          16729         16958         +1.37%
BenchmarkUnmarshal/nil_data_v0.3-16                                                             15394         15561         +1.08%
BenchmarkUnmarshal/struct_data_v1.0-16                                                          17052         17108         +0.33%
BenchmarkUnmarshal/base64_json_encoded_data_v1.0-16                                             11311         11341         +0.27%
BenchmarkUnmarshal/base64_xml_encoded_data_v1.0-16                                              12085         11786         -2.47%

benchmark                                                                                       old allocs     new allocs     delta
BenchmarkUnmarshal/struct_data_v0.3-16                                                          76             75             -1.32%
BenchmarkUnmarshal/data,_attributes_and_extensions_and_specversion_with_struct_data_v0.3-16     83             82             -1.20%
BenchmarkUnmarshal/data,_attributes_and_extensions_and_specversion_with_struct_data_v1.0-16     83             82             -1.20%
BenchmarkUnmarshal/string_data_v1.0-16                                                          73             72             -1.37%
BenchmarkUnmarshal/nil_data_v1.0-16                                                             71             70             -1.41%
BenchmarkUnmarshal/string_data_v0.3-16                                                          75             74             -1.33%
BenchmarkUnmarshal/nil_data_v0.3-16                                                             71             70             -1.41%
BenchmarkUnmarshal/struct_data_v1.0-16                                                          74             73             -1.35%
BenchmarkUnmarshal/base64_json_encoded_data_v1.0-16                                             49             48             -2.04%
BenchmarkUnmarshal/base64_xml_encoded_data_v1.0-16                                              49             48             -2.04%

benchmark                                                                                       old bytes     new bytes     delta
BenchmarkUnmarshal/struct_data_v0.3-16                                                          3584          3533          -1.42%
BenchmarkUnmarshal/data,_attributes_and_extensions_and_specversion_with_struct_data_v0.3-16     3739          3688          -1.36%
BenchmarkUnmarshal/data,_attributes_and_extensions_and_specversion_with_struct_data_v1.0-16     3739          3688          -1.36%
BenchmarkUnmarshal/string_data_v1.0-16                                                          3392          3340          -1.53%
BenchmarkUnmarshal/nil_data_v1.0-16                                                             3351          3301          -1.49%
BenchmarkUnmarshal/string_data_v0.3-16                                                          3568          3517          -1.43%
BenchmarkUnmarshal/nil_data_v0.3-16                                                             3352          3300          -1.55%
BenchmarkUnmarshal/struct_data_v1.0-16                                                          3407          3357          -1.47%
BenchmarkUnmarshal/base64_json_encoded_data_v1.0-16                                             2708          2659          -1.81%
BenchmarkUnmarshal/base64_xml_encoded_data_v1.0-16                                              2724          2675          -1.80%

Not a huge difference at all but 🤷‍♂️. Seemed worth to use the lib as inteded (with the non-buffered iterator pool)

When not streaming the data, we might as well just use jsoniter's pools as intended and feed the iterator with the ready-to-go byte slice directly.
Kept the reader interface intact for enhancements on the streaming side.

Signed-off-by: Markus Thömmes <markusthoemmes@me.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants