JSPM

jsz85

1.0.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 29
  • Score
    100M100P100Q60719F

jsZ85 provides an implementation of the Z85 codec following the specs of https://rfc.zeromq.org/spec/32/. It is a port of the https://github.com/ruben-viscomi/ktZ85 implementation for Kotlin.

Package Exports

  • jsz85
  • jsz85/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (jsz85) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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)

codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 39b 20.000µs 20.000µs 100.000µs 100.000µs
Z85 5 39b 80.000µs 40.000µs 400.000µs 200.000µs
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 1.00KB 60.000µs 0.00000ms 300.000µs 0.00000ms
Z85 5 1.00KB 120.000µs 100.000µs 600.000µs 500.000µs
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 10.00KB 200.000µs 40.000µs 1.000ms 200.000µs
Z85 5 10.00KB 800.000µs 260.000µs 4.000ms 1.300ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 100.00KB 2.060ms 540.000µs 10.300ms 2.700ms
Z85 5 100.00KB 6.140ms 1.680ms 30.700ms 8.400ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 500.00KB 7.480ms 2.000ms 37.400ms 10.000ms
Z85 5 500.00KB 12.960ms 3.980ms 64.800ms 19.900ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 1.00MB 13.580ms 3.820ms 67.900ms 19.100ms
Z85 5 1.00MB 30.020ms 7.440ms 150.100ms 37.200ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 10.00MB 306.140ms 94.060ms 1.531s 470.300ms
Z85 5 10.00MB 911.360ms 181.060ms 4.557s 905.300ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 100.00MB 3.495s 1.057s 17.477s 5.284s
Z85 5 100.00MB 9.482s 1.796s 47.413s 8.979s

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

codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 39b 0.00000ms 0.00000ms 0.00000ms 0.00000ms
Z85 5 39b 0.00000ms 0.00000ms 0.00000ms 0.00000ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 1.00KB 0.00000ms 200.000µs 0.00000ms 1.000ms
Z85 5 1.00KB 0.00000ms 200.000µs 0.00000ms 1.000ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 10.00KB 1.000ms 0.00000ms 5.000ms 0.00000ms
Z85 5 10.00KB 400.000µs 0.00000ms 2.000ms 0.00000ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 100.00KB 7.400ms 1.400ms 37.000ms 7.000ms
Z85 5 100.00KB 3.200ms 2.600ms 16.000ms 13.000ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 500.00KB 34.200ms 3.200ms 171.000ms 16.000ms
Z85 5 500.00KB 11.200ms 8.000ms 56.000ms 40.000ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 1.00MB 52.400ms 5.600ms 262.000ms 28.000ms
Z85 5 1.00MB 16.000ms 15.000ms 80.000ms 75.000ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 10.00MB 850.400ms 74.600ms 4.252s 373.000ms
Z85 5 10.00MB 258.800ms 132.600ms 1.294s 663.000ms
codec numberOfBenchRuns inputSize averageTimeElapsedToEncode averageTimeElapsedToDecode timeElapsedToEncodeAllRuns timeElapsedToDecodeAllRuns
base64 5 100.00MB 8.463s 759.800ms 42.316s 3.799s
Z85 5 100.00MB 2.762s 1.194s 13.809s 5.971s