@node-rs/xxhash
Version:
Fastest xxhash implementation in Node.js
128 lines (110 loc) ⢠7.9 kB
Markdown
# `@node-rs/xxhash`


[](https://packagephobia.com/result?p=@node-rs/xxhash)
> š Help me to become a full-time open-source developer by [sponsoring me on Github](https://github.com/sponsors/Brooooooklyn)
[`xxhash-rust`](https://github.com/DoumanAsh/xxhash-rust) binding for Node.js.
## Install this package
```
yarn add @node-rs/xxhash
pnpm add @node-rs/xxhash
npm install @node-rs/xxhash
```
## API
```ts
export type BufferLike =
| Buffer
| string
| Uint8Array
| ArrayBuffer
| SharedArrayBuffer
| ReadonlyArray<number>
| number[]
export function xxh32(input: BufferLike, seed?: number): number
export function xxh64(input: BufferLike, seed?: BigInt): BigInt
export class Xxh32 {
constructor(seed?: number)
update(input: BufferLike): this
digest(): number
reset(): void
}
export class Xxh64 {
constructor(seed?: BigInt)
update(input: BufferLike): this
digest(): BigInt
reset(): void
}
export class Xxh3 {
static withSeed(seed?: BigInt): Xxh3
static withSecret(secret: BufferLike): Xxh3
private constructor() {}
update(input: BufferLike): this
digest(): BigInt
reset(): void
}
export const xxh3: {
xxh64: (input: BufferLike, seed?: BigInt) => BigInt
xxh64WithSecret: (input: BufferLike, secret: BufferLike) => BigInt
xxh128: (input: BufferLike, seed?: BigInt) => BigInt
xxh128WithSecret: (input: BufferLike, secret: BufferLike) => BigInt
Xxh3: typeof Xxh3
}
```
## Performance
### Hardware
```
,MMMM. Host - xxxxxxxxxxxxxxxxxxxxxxx
.MMMMMM Machine - Mac15,9
MMMMM, Kernel - 24.0.0
.;MMMMM:' MMMMMMMMMM;. OS - macOS 15.0.1 Sequoia
MMMMMMMMMMMMNWMMMMMMMMMMM: DE - Aqua
.MMMMMMMMMMMMMMMMMMMMMMMMWM. WM - Quartz Compositor
MMMMMMMMMMMMMMMMMMMMMMMMM. Packages - 194 (Homebrew), 32 (cargo)
;MMMMMMMMMMMMMMMMMMMMMMMM: Shell - zsh
:MMMMMMMMMMMMMMMMMMMMMMMM: Terminal - warpterminal (Version v0.2024.10.23.14.49.stable_00)
.MMMMMMMMMMMMMMMMMMMMMMMMM. Resolution - 5120x2880@160fps (as 2560x1440)
MMMMMMMMMMMMMMMMMMMMMMMMMMM. 2992x1934@120fps (as 1496x967)
.MMMMMMMMMMMMMMMMMMMMMMMMMM. 2232x1512@60fps (as 1116x756)
MMMMMMMMMMMMMMMMMMMMMMMM Uptime - 1d 2h 32m
;MMMMMMMMMMMMMMMMMMMM. CPU - Apple M3 Max (16)
.MMMM,. .MMMM,. CPU Load - 16%
Memory - 50.1 GB / 134.2 GB
Battery - 78% & Discharging
Disk Space - 624.0 GB / 994.7 GB
```
### Result
```
⯠yarn workspace @node-rs/xxhash bench
xxh32 without initial seed
āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāā
ā (index) ā Task Name ā ops/sec ā Average Time (ns) ā Margin ā Samples ā
āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¤
ā 0 ā '@node-rs/xxhash h32' ā '20,146' ā 49637.20101250711 ā '±0.20%' ā 10074 ā
ā 1 ā 'xxhash c++' ā '17,348' ā 57642.4387319887 ā '±0.19%' ā 8675 ā
ā 2 ā 'xxhashjs h32' ā '2,697' ā 370657.902149741 ā '±0.24%' ā 1349 ā
āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāā
xxh32 without initial seed multi step
āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāā
ā (index) ā Task Name ā ops/sec ā Average Time (ns) ā Margin ā Samples ā
āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¤
ā 0 ā '@node-rs/xxhash h32' ā '17,111' ā 58440.61746142987 ā '±0.20%' ā 8556 ā
ā 1 ā 'xxhashjs h32' ā '2,738' ā 365160.82262773765 ā '±0.19%' ā 1370 ā
āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāā
xxh64 without initial seed
āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāā
ā (index) ā Task Name ā ops/sec ā Average Time (ns) ā Margin ā Samples ā
āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¤
ā 0 ā '@node-rs/xxhash 64' ā '50,159' ā 19936.33995215147 ā '±0.11%' ā 25080 ā
ā 1 ā 'xxhash C++' ā '47,980' ā 20841.790588135264 ā '±0.17%' ā 23991 ā
ā 2 ā 'wasm' ā '33,916' ā 29484.03756117805 ā '±0.21%' ā 16959 ā
ā 3 ā 'xxhashjs h64' ā '95' ā 10431058.97916674 ā '±0.57%' ā 48 ā
āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāā
xxh64 without initial seed multi step
āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāā
ā (index) ā Task Name ā ops/sec ā Average Time (ns) ā Margin ā Samples ā
āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¤
ā 0 ā '@node-rs/xxhash 64' ā '46,603' ā 21457.79825765685 ā '±0.20%' ā 23302 ā
ā 1 ā 'wasm' ā '34,681' ā 28834.205985814675 ā '±0.19%' ā 17341 ā
ā 2 ā 'xxhashjs h64' ā '96' ā 10411336.75510195 ā '±0.73%' ā 49 ā
āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāā
```