Optimize decoding utf8 buffers to strings. #2062
Open
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.
Replace the existing
utf8_read
function with a higher performance approach, which switches between 3 different implementations depending on the contents of the string:TextDecoder
is available, useTextDecoder
.String.fromCharCode
, reading 8 bytes at a time.Here are the results of
bench/index.js
on my machine. Note that I tweakedbench/index.js
to useUint8Array
rather than Node'sBuffer
, sinceBuffer
is not available in browsers.Before:
After optimizations applied:
The improvement is larger for protobufs that use more strings than the benchmark.
Also, adds a benchmark of these approaches to help convince us that this is an effective strategy.
Output of the benchmark program