1.0.2 • Published 8 months ago

jsz85 v1.0.2

Weekly downloads
-
License
-
Repository
github
Last release
8 months ago

jsZ85

jsZ85 provides an implementation of the Z85 codec following the zeromq rfc.

Examples

function getBytes(str: string): Uint8Array {
  return new TextEncoder().encode(str);
}

const toEncode = "Hello, World!";

// ENCODING EXAMPLE
const encoded = Z85.encode(getBytes(toEncode));
console.log(encoded); // Outputs: nm=QNz.92jz/PV8aP

// DECODING EXAMPLE
const decoded = Z85.decode(encoded);
console.log(String.fromCharCode(...decoded)); // Outputs: Hello, World!

Benchmarks

Following the results on my machine of the benchmarks found in the bench folder.

Node.js (Buffer base64 vs. Z85)

┌─────────┬──────────┬───────────────────┬───────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼───────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '39b'     │ '43.480µs'                 │ '13.560µs'                 │ '217.400µs'                │ '67.800µs'                 │
│ 1       │ 'Z85'    │ 5                 │ '39b'     │ '35.640µs'                 │ '44.540µs'                 │ '178.200µs'                │ '222.700µs'                │
└─────────┴──────────┴───────────────────┴───────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘
┌─────────┬──────────┬───────────────────┬───────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼───────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '1.00KB'  │ '3.960µs'                  │ '5.700µs'                  │ '19.800µs'                 │ '28.500µs'                 │
│ 1       │ 'Z85'    │ 5                 │ '1.00KB'  │ '64.580µs'                 │ '59.800µs'                 │ '322.900µs'                │ '299.000µs'                │
└─────────┴──────────┴───────────────────┴───────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘
┌─────────┬──────────┬───────────────────┬───────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼───────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '10.00KB' │ '32.600µs'                 │ '36.560µs'                 │ '163.000µs'                │ '182.800µs'                │
│ 1       │ 'Z85'    │ 5                 │ '10.00KB' │ '1.377ms'                  │ '1.210ms'                  │ '6.886ms'                  │ '6.049ms'                  │
└─────────┴──────────┴───────────────────┴───────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘
┌─────────┬──────────┬───────────────────┬────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize  │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '100.00KB' │ '182.080µs'                │ '243.120µs'                │ '910.400µs'                │ '1.216ms'                  │
│ 1       │ 'Z85'    │ 5                 │ '100.00KB' │ '4.706ms'                  │ '668.220µs'                │ '23.528ms'                 │ '3.341ms'                  │
└─────────┴──────────┴───────────────────┴────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘
┌─────────┬──────────┬───────────────────┬────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize  │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '500.00KB' │ '517.120µs'                │ '1.340ms'                  │ '2.586ms'                  │ '6.702ms'                  │
│ 1       │ 'Z85'    │ 5                 │ '500.00KB' │ '15.727ms'                 │ '3.849ms'                  │ '78.637ms'                 │ '19.247ms'                 │
└─────────┴──────────┴───────────────────┴────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘
┌─────────┬──────────┬───────────────────┬───────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼───────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '1.00MB'  │ '295.800µs'                │ '1.587ms'                  │ '1.479ms'                  │ '7.937ms'                  │
│ 1       │ 'Z85'    │ 5                 │ '1.00MB'  │ '36.169ms'                 │ '6.690ms'                  │ '180.846ms'                │ '33.448ms'                 │
└─────────┴──────────┴───────────────────┴───────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘
┌─────────┬──────────┬───────────────────┬───────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼───────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '10.00MB' │ '3.596ms'                  │ '18.039ms'                 │ '17.978ms'                 │ '90.196ms'                 │
│ 1       │ 'Z85'    │ 5                 │ '10.00MB' │ '619.946ms'                │ '81.798ms'                 │ '3.100s'                   │ '408.990ms'                │
└─────────┴──────────┴───────────────────┴───────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘
┌─────────┬──────────┬───────────────────┬────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┬────────────────────────────┐
│ (index) │ codec    │ numberOfBenchRuns │ inputSize  │ averageTimeElapsedToEncode │ averageTimeElapsedToDecode │ timeElapsedToEncodeAllRuns │ timeElapsedToDecodeAllRuns │
├─────────┼──────────┼───────────────────┼────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┼────────────────────────────┤
│ 0       │ 'base64' │ 5                 │ '100.00MB' │ '81.588ms'                 │ '218.865ms'                │ '407.941ms'                │ '1.094s'                   │
│ 1       │ 'Z85'    │ 5                 │ '100.00MB' │ '7.420s'                   │ '836.813ms'                │ '37.098s'                  │ '4.184s'                   │
└─────────┴──────────┴───────────────────┴────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘

Chrome - V8 engine (btoa/atob base64 vs. Z85)

Firefox - SpiderMonkey engine (btoa/atob base64 vs. Z85)

1.0.2

8 months ago

1.0.1

1 year ago

1.0.0

1 year ago