-
-
Notifications
You must be signed in to change notification settings - Fork 27
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
Improve JSON Parser Performances #453
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4768da8
to
0bc8912
Compare
Testing showed that a buffer of 128 bytes yields good results. Making it configurable through JVM parameters allows for use to tune the sizes for their local needs if the default values do not fit their data.
This parser includes all performance improvements that do not require a change in `CharLikeChunks`, allowing to be compatible with potential custom implementation of the trait in user code.
b7dcc96
to
3b62258
Compare
66626d5
to
23ddee5
Compare
23ddee5
to
f8fbb11
Compare
ybasket
approved these changes
Jun 23, 2023
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Left one comment, but looks good, nice work!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Follow-up from #489
This PR implements several optimizations, resulting from observations from profilers:
CharLikeChunk
implementationsString.charAt
makes more checks than array accessOption
allocations throughout the parser.With these improvements in place, we get these results on my machine (openjdk 19, Nixos, Intel Core i5-6500, 24GiB RAM):
Compared to jawn the token parser is now only ~1.88x slower (previously ~2.57x slower) and the value parser is ~3.33x slower (previously ~3.85x slower).
Some progress can probably be achieved in the AST construction and will be addressed later, to bring fs2-data on par with circe-fs2.