Skip to content

util: improve `TextDecoder` performance

Improves the text decoder by 32%. Happy to update the benchmark according to the reviews.

Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1211/

17:23:35                                                                             confidence improvement accuracy (*)    (**)   (***)
17:23:35 util/text-decoder.js n=1000000 len=16384 ignoreBOM=0 encoding='iso-8859-3'         ***     20.18 %       ±7.84% ±10.44% ±13.61%
17:23:35 util/text-decoder.js n=1000000 len=16384 ignoreBOM=0 encoding='latin1'             ***     16.72 %       ±7.16%  ±9.54% ±12.44%
17:23:35 util/text-decoder.js n=1000000 len=16384 ignoreBOM=0 encoding='utf-8'              ***     14.24 %       ±7.64% ±10.16% ±13.23%
17:23:35 util/text-decoder.js n=1000000 len=16384 ignoreBOM=1 encoding='iso-8859-3'         ***     19.93 %       ±7.42%  ±9.89% ±12.92%
17:23:35 util/text-decoder.js n=1000000 len=16384 ignoreBOM=1 encoding='latin1'             ***     21.41 %       ±8.10% ±10.79% ±14.06%
17:23:35 util/text-decoder.js n=1000000 len=16384 ignoreBOM=1 encoding='utf-8'              ***     15.44 %       ±8.85% ±11.78% ±15.37%
17:23:35 util/text-decoder.js n=1000000 len=256 ignoreBOM=0 encoding='iso-8859-3'           ***     26.89 %       ±6.35%  ±8.45% ±11.01%
17:23:35 util/text-decoder.js n=1000000 len=256 ignoreBOM=0 encoding='latin1'               ***     27.35 %       ±7.95% ±10.64% ±13.99%
17:23:35 util/text-decoder.js n=1000000 len=256 ignoreBOM=0 encoding='utf-8'                ***     26.06 %       ±7.02%  ±9.34% ±12.17%
17:23:35 util/text-decoder.js n=1000000 len=256 ignoreBOM=1 encoding='iso-8859-3'           ***     20.31 %       ±8.01% ±10.66% ±13.88%
17:23:35 util/text-decoder.js n=1000000 len=256 ignoreBOM=1 encoding='latin1'               ***     26.52 %       ±6.93%  ±9.25% ±12.11%
17:23:35 util/text-decoder.js n=1000000 len=256 ignoreBOM=1 encoding='utf-8'                ***     20.07 %       ±7.89% ±10.51% ±13.69%
17:23:35 util/text-decoder.js n=1000000 len=524288 ignoreBOM=0 encoding='iso-8859-3'                -1.38 %       ±5.57%  ±7.41%  ±9.64%
17:23:35 util/text-decoder.js n=1000000 len=524288 ignoreBOM=0 encoding='latin1'                    -0.70 %       ±6.39%  ±8.50% ±11.06%
17:23:35 util/text-decoder.js n=1000000 len=524288 ignoreBOM=0 encoding='utf-8'                      2.67 %       ±5.81%  ±7.73% ±10.08%
17:23:35 util/text-decoder.js n=1000000 len=524288 ignoreBOM=1 encoding='iso-8859-3'                -0.31 %       ±6.09%  ±8.10% ±10.55%
17:23:35 util/text-decoder.js n=1000000 len=524288 ignoreBOM=1 encoding='latin1'                    -5.15 %       ±6.94%  ±9.24% ±12.03%
17:23:35 util/text-decoder.js n=1000000 len=524288 ignoreBOM=1 encoding='utf-8'                      1.20 %       ±6.66%  ±8.88% ±11.57%
17:23:35 
17:23:36 Be aware that when doing many comparisons the risk of a false-positive
17:23:36 result increases. In this case, there are 18 comparisons, you can thus
17:23:36 expect the following amount of false-positive results:
17:23:36   0.90 false positives, when considering a   5% risk acceptance (*, **, ***),
17:23:36   0.18 false positives, when considering a   1% risk acceptance (**, ***),
17:23:36   0.02 false positives, when considering a 0.1% risk acceptance (***)

cc @nodejs/buffer @nodejs/util @nodejs/performance

Merge request reports

Loading