修复 nodejs/performance#3
基准 CI:https ://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1219/
测试结果:
util/text-decoder.js type='ArrayBuffer' n=100 len=16384 ignoreBOM=0 encoding='iso-8859-3' -6.27 % ±8.96% ±11.92% ±15.52% util/text-decoder.js type='ArrayBuffer' n=100 len=16384 ignoreBOM=0 encoding='latin1' -4.62 % ±8.01% ±10.67% ±13.90% util/text-decoder.js type='ArrayBuffer' n=100 len=16384 ignoreBOM=0 encoding='utf-8' *** 85.34 %
|
与 Deno 和 Bun 进行比较的微基准(基准可在https://github.com/anonrig/node-benchmarks获得)
> node-benchmarks@1.0.0 text-decoder > ~/Developer/node/out/Release/node ./text-decoder/index.mjs && bun run ./text-decoder/index.mjs && deno run -A ./text-decoder/deno.js
cpu: Apple M1 Max runtime: node v20.0.0-pre (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p995 -------------------------------------------------- ----------------------------- smallUint8 308.11 ns/iter (298.87 ns … 331.5 ns) 310.62 ns 331.39 ns 331.5 ns bigUint8 2.64 µs/iter (2.6 µs … 2.73 µs) 2.64 µs 2.73 µs 2.73 µs cpu: Apple M1 Max runtime: bun 0.2.2 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p995 -------------------------------------------------- ----------------------------- smallUint8 213.82 ns/iter (200.47 ns … 461.84 ns) 216.17 ns 227.67 ns 243.92 ns bigUint8 1.19 µs/iter (1.07 µs … 1.36 µs) 1.23 µs 1.36 µs 1.36 µs cpu: Apple M1 Max runtime: deno 1.27.1 (aarch64-apple-darwin)
benchmark time (avg) (min … max) p75 p99 p995 -------------------------------------------------- ----------------------------- smallUint8 458.98 ns/iter (439.37 ns … 477.2 ns) 463 ns 476.7 ns 477.2 ns bigUint8 3.81 µs/iter (3.74 µs … 3.86 µs) 3.82 µs 3.86 µs 3.86 µs
|
使用方式:
// Buffer.from(string, 'utf8') is faster, when available const toUtf8 = typeof Buffer === 'undefined' ? (value: string) => new TextEncoder().encode(value) : (value: string) => Buffer.from(value, 'utf8')
|
更多点击标题