Skip to content

Remove intermediary reader and directly feed iterator for unmarshal#626

Merged
slinkydeveloper merged 1 commit intocloudevents:masterfrom
markusthoemmes:no-reader
Nov 26, 2020
Merged

Remove intermediary reader and directly feed iterator for unmarshal#626
slinkydeveloper merged 1 commit intocloudevents:masterfrom
markusthoemmes:no-reader

Conversation

@markusthoemmes
Copy link
Copy Markdown
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