https://github.com/dolegi/rapid-crc
The fastest crc nodejs implementation
https://github.com/dolegi/rapid-crc
cpp crc crc32 node-addon-api
Last synced: 6 months ago
JSON representation
The fastest crc nodejs implementation
- Host: GitHub
- URL: https://github.com/dolegi/rapid-crc
- Owner: dolegi
- Created: 2019-08-03T15:59:58.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-03T05:17:21.000Z (over 2 years ago)
- Last Synced: 2025-04-01T23:35:16.754Z (6 months ago)
- Topics: cpp, crc, crc32, node-addon-api
- Language: JavaScript
- Homepage:
- Size: 148 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://travis-ci.org/dolegi/rapid-crc)
# Rapid CRC
The fastest crc32 and crc32c implemenations on npm### Install
```bash
npm install rapid-crc
```### Usage
```javascript
const rapidCrc = require('rapid-crc')const crc1 = rapidCrc.crc32(Buffer.from('123'))
// -> 2297840959
const crc2 = rapidCrc.crc32c(Buffer.from('123'))
// -> 2413851447
```### Details
### crc32
Uses slice-by-32 (based on slice-by-8 by intel and slice-by-16 by stehpan brumme). Increasing the size of the lookup to 32 gave the best performance on my machine (2015 macbook pro, i5, 8GB), by 64 > was slower. I think this is due to the amount of data being loaded per cache-line.#### crc32c (Castagnoli)
Uses [SSE4.2](https://en.wikipedia.org/wiki/SSE4#SSE4.2).### Performance
#### crc32
```bash
$ node --version
v10.16.1
$ node performance/benchmark-crc32.js
rapid-crc x 1,593,095 ops/sec ±0.86% (89 runs sampled)
turbo x 608,301 ops/sec ±2.11% (86 runs sampled)
sheetjs x 283,236 ops/sec ±0.92% (90 runs sampled)
Fastest is rapid-crc
```#### crc32c
```bash
$ node --version
v10.16.1
$ node performance/benchmark-crc32c.js
rapid-crc x 2,677,754 ops/sec ±0.53% (89 runs sampled)
turbo x 617,280 ops/sec ±0.45% (86 runs sampled)
sse4_crc32 x 2,353,431 ops/sec ±0.57% (90 runs sampled)
Fastest is rapid-crc
```### References
- https://github.com/madler/zlib/blob/master/crc32.c
- https://create.stephan-brumme.com/crc32/
- https://www.npmjs.com/package/sse4_crc32