node: replace nbytes with simdutf for base64 decoding#6497
Merged
danlapid merged 2 commits intoApr 20, 2026
Conversation
|
All contributors have signed the CLA ✍️ ✅ |
Author
|
I have read the CLA Document and I hereby sign the CLA |
anonrig
approved these changes
Apr 3, 2026
jasnell
reviewed
Apr 4, 2026
jasnell
approved these changes
Apr 4, 2026
Author
|
It's been a while since this was approved. is there anything else I need to do to get this finalized? |
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 implementation aims to implement using simdutf for decoding base64 in the Node Buffer api which has been a TODO for a while.
I use the option "base64_default_or_url_accept_garbage" which behaves exactly like Nodejs. All tests for the buffer api pass successfully.
I also wrote a simple micro-benchmark to avoid regressions. The benchmark is only a sanity check and is unlikely to represent actual base64 strings in use. The results are below:
Original implementation using nbytes
simdutf implementation
We get a tiny regression in decoding strings with non mixed alphabets but a huge speedup in decoding strings with mixed alphabets. It is useful to note that the time shown here is the total for all runs. In this case (where we run 10,000 iterations) a ~1ms regression is actually 0.0001ms for every individual run. The benchmark code and the config are included below