perf(csv-parse): avoid unnecessary allocation in ResizeableBuffer.toString#495
Open
CamWass wants to merge 1 commit into
Open
perf(csv-parse): avoid unnecessary allocation in ResizeableBuffer.toString#495CamWass wants to merge 1 commit into
CamWass wants to merge 1 commit into
Conversation
This file contains hidden or 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
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.
This PR optimises
ResizeableBuffer.toStringincsv-parseby avoiding an intermediate sliced Buffer created bythis.buf.slice(...)and instead passes the bounds directly toBuffer.toString.Although this allocation is a small cost, it adds up given this method is called for each field in the input.
Benchmarks
Existing benchmarks
Take these with a grain of salt - the existing benchmark suite only parses each input file once, making them quite noisy (especially for the smaller inputs)
Custom benchmark
To get a more accurate benchmark, I modified the existing benchmark to only test a input file of length 200,000, and took the average of 100 iterations:
0.386769533s before -> 0.340958805s after = ~12% improvement