diff --git a/benchmark.mjs b/benchmark.mjs index 9a01ac4..ab114ad 100644 --- a/benchmark.mjs +++ b/benchmark.mjs @@ -5,6 +5,7 @@ import {randomBytes} from 'node:crypto'; import benchmark from 'benchmark'; import { base64ToString, + compareUint8Arrays, concatUint8Arrays, hexToUint8Array, isUint8Array, @@ -17,6 +18,8 @@ import { const oneMb = 1024 * 1024; const largeUint8Array = new Uint8Array(randomBytes(oneMb).buffer); +// eslint-disable-next-line unicorn/prefer-spread +const largeUint8ArrayDuplicate = largeUint8Array.slice(); const textFromUint8Array = uint8ArrayToString(largeUint8Array); const base64FromUint8Array = Buffer.from(textFromUint8Array).toString('base64'); const hexFromUint8Array = uint8ArrayToHex(largeUint8Array); @@ -25,6 +28,8 @@ const suite = new benchmark.Suite(); suite.add('isUint8Array', () => isUint8Array(largeUint8Array)); +suite.add('compareUint8Arrays', () => compareUint8Arrays(largeUint8Array, largeUint8ArrayDuplicate)); + suite.add('concatUint8Arrays with 2 arrays', () => concatUint8Arrays([largeUint8Array, largeUint8Array])); suite.add('concatUint8Arrays with 3 arrays', () => concatUint8Arrays([largeUint8Array, largeUint8Array])); diff --git a/index.js b/index.js index 562945a..acf22b4 100644 --- a/index.js +++ b/index.js @@ -79,26 +79,15 @@ export function compareUint8Arrays(a, b) { const length = Math.min(a.length, b.length); for (let index = 0; index < length; index++) { - if (a[index] < b[index]) { - return -1; - } - - if (a[index] > b[index]) { - return 1; + const diff = a[index] - b[index]; + if (diff !== 0) { + return Math.sign(diff); } } // At this point, all the compared elements are equal. // The shorter array should come first if the arrays are of different lengths. - if (a.length > b.length) { - return 1; - } - - if (a.length < b.length) { - return -1; - } - - return 0; + return Math.sign(a.length - b.length); } const cachedDecoder = new globalThis.TextDecoder();