jsz85
v1.0.2
Published
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.
Downloads
183
Maintainers
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' │
└─────────┴──────────┴───────────────────┴────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┴────────────────────────────┘