Description
For binary protocols, such as msgpack, performance of writing/reading strings can be crucial, however those strings rarely (virtually never) exist on a binary buffer on their own. When decoding a string from a binary buffer of Uint8Array (obtained over, say, websockets) it's possible to cheaply create a subarray and pass it over to TextDecoder#decode
, as such the decoding story is pretty straight forward.
The writing story is much more complicated.
In order to write a string into an existing buffer, one must take the result Uint8Array
from TextEncoder#encode
and TypedArray#set
it at a desired offset into another buffer, which introduces unnecessary copying and, as result, is slower than plain JavaScript encoding implementations (at least for UTF-8).
A much better solution would be analog to the Node.js Buffer#write
implementation where the encoder can write a string to a buffer at a desired offset. Example signature could be something like:
TextEncoder#write(DOMString source, Uint8Array target [, Number offset [, Number length]]) -> Number bytesWritten