Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Fast CRC32 computation in TypeScript

License

NotificationsYou must be signed in to change notification settings

foxglove/crc

Repository files navigation

Fast CRC32 computation in TypeScript

npm version

Introduction

ACyclic Redundancy Check (CRC) is a calculation used to detect errors in data transmission.

This library implementsCRC32, the standard 32-bit CRC using the binary polynomial0xEDB88320. This is the same algorithm used inPNG,zlib, and other popular applications.

Interface

The following functions are exported from this package:

functioncrc32Init():number;functioncrc32Update(prev:number,data:ArrayBufferView):number;functioncrc32Final(prev:number):number;functioncrc32(data:ArrayBufferView):number;

Note: Since the CRC algorithm works with unsigned data, thecrc32 andcrc32Final functions always returnnon-negative numbers. For example, CRC32(0x01) returns 2768625435 rather than -1526341861.

Usage

import{crc32}from"@foxglove/crc";constdata=newUint8Array(...);constcrc=crc32(data);
import{crc32Init,crc32Update,crc32Final}from"@foxglove/crc";letcrc=crc32Init();while(/* more data available */){crc=crc32Update(crc,data);}crc=crc32Final(crc);

Benchmarks

This package achieves a >5x performance improvement over many other CRC packages, because of the multi-byte algorithms used (adapted fromhttps://github.com/komrad36/CRC).

The following benchmarks were recorded on a MacBook Pro with an M1 Pro chip and 16GB of RAM. Each iteration ("op") is processing 1MB of data.

$ yarn bench...  crc:    355 ops/s, ±0.56%     | 81.52% slower  node-crc:    376 ops/s, ±0.14%     | 80.43% slower  crc-32:    1 057 ops/s, ±0.16%   | 44.98% slower  polycrc:    327 ops/s, ±0.21%     | slowest, 82.98% slower  this package:    1 921 ops/s, ±0.18%   | fastest

References

For further information about CRCs and their computation, see:

License

@foxglove/crc is licensed under theMIT License.

Releasing

  1. Runyarn version --[major|minor|patch] to bump version
  2. Rungit push && git push --tags to push new tag
  3. GitHub Actions will take care of the rest

Stay in touch

Join ourSlack channel to ask questions, share feedback, and stay up to date on what our team is working on.

About

Fast CRC32 computation in TypeScript

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp