src: improve buffer.transcode performance
Let's improve buffer.transcode
performance for UTF8 to UTF16le and UTF16le to UTF8 encodings. I'm working on similar implementation on workerd at https://github.com/cloudflare/workerd/pull/2462.
Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1591/
confidence improvement accuracy (*) (**) (***)
buffers/buffer-transcode.js n=100000 length=1 toEncoding='ascii' fromEncoding='latin1' -0.73 % ±1.12% ±1.49% ±1.94%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='ascii' fromEncoding='ucs2' *** 2.23 % ±1.18% ±1.57% ±2.05%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='ascii' fromEncoding='utf8' 0.50 % ±1.16% ±1.55% ±2.01%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='latin1' fromEncoding='ascii' -1.05 % ±1.13% ±1.51% ±1.97%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='latin1' fromEncoding='ucs2' 0.45 % ±0.76% ±1.01% ±1.31%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='latin1' fromEncoding='utf8' -0.59 % ±1.50% ±2.00% ±2.61%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='ucs2' fromEncoding='ascii' *** 26.86 % ±1.08% ±1.44% ±1.87%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='ucs2' fromEncoding='latin1' *** 28.85 % ±0.82% ±1.09% ±1.43%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='ucs2' fromEncoding='utf8' * 0.82 % ±0.77% ±1.03% ±1.34%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='utf8' fromEncoding='ascii' * -1.15 % ±1.13% ±1.51% ±1.96%
buffers/buffer-transcode.js n=100000 length=1 toEncoding='utf8' fromEncoding='latin1' -0.80 % ±1.20% ±1.60% ±2.08%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='ascii' fromEncoding='latin1' 0.01 % ±1.21% ±1.61% ±2.10%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='ascii' fromEncoding='ucs2' *** 1.57 % ±0.63% ±0.84% ±1.09%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='ascii' fromEncoding='utf8' -0.12 % ±1.04% ±1.39% ±1.81%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='latin1' fromEncoding='ascii' -0.66 % ±1.00% ±1.33% ±1.73%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='latin1' fromEncoding='ucs2' -0.47 % ±0.66% ±0.88% ±1.14%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='latin1' fromEncoding='utf8' 0.47 % ±1.44% ±1.92% ±2.50%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='ucs2' fromEncoding='ascii' *** 27.27 % ±0.86% ±1.15% ±1.50%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='ucs2' fromEncoding='latin1' *** 28.94 % ±1.06% ±1.41% ±1.85%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='ucs2' fromEncoding='utf8' -0.87 % ±0.92% ±1.23% ±1.60%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='utf8' fromEncoding='ascii' -0.23 % ±1.08% ±1.44% ±1.87%
buffers/buffer-transcode.js n=100000 length=10 toEncoding='utf8' fromEncoding='latin1' * -1.51 % ±1.19% ±1.58% ±2.06%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='ascii' fromEncoding='latin1' * -1.00 % ±0.81% ±1.07% ±1.39%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='ascii' fromEncoding='ucs2' *** 1.79 % ±0.36% ±0.49% ±0.64%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='ascii' fromEncoding='utf8' -0.60 % ±0.79% ±1.05% ±1.36%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='latin1' fromEncoding='ascii' 0.04 % ±0.65% ±0.86% ±1.12%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='latin1' fromEncoding='ucs2' 0.02 % ±0.38% ±0.51% ±0.68%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='latin1' fromEncoding='utf8' * -0.83 % ±0.82% ±1.09% ±1.42%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='ucs2' fromEncoding='ascii' *** 17.87 % ±0.69% ±0.93% ±1.22%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='ucs2' fromEncoding='latin1' *** 8.76 % ±0.71% ±0.95% ±1.24%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='ucs2' fromEncoding='utf8' *** 27.92 % ±0.62% ±0.82% ±1.07%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='utf8' fromEncoding='ascii' 0.26 % ±0.34% ±0.46% ±0.60%
buffers/buffer-transcode.js n=100000 length=1000 toEncoding='utf8' fromEncoding='latin1' -0.01 % ±0.46% ±0.61% ±0.79%