Add specialised passStringToWasm for Node.js #1391
Merged
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.
Node.js doesn't currently implement
TextEncoder::encodeInto
. I've raised an upstream issue to add it - nodejs/node#26904 - but it's likely to take some time and will be available only in new releases.In the meanwhile, it's worth noting that Node.js already has
Buffer::write
which has pretty similar semantics, but doesn't require creating an intermediate view using.subarray
and instead accepts pointer and length directly.Also, Node.js has
Buffer::byteLength
helper which allows to efficiently retrieve an encoded byte length of a string upfront, and so allows us to avoid a loop with reallocations.This change takes leverage of these methods by generating an additional Buffer-based view into the WASM memory and using it for string operations.
I'm seeing up to 35% increase in performance in string-heavy library benchmarks.