Skip to content

Instantly share code, notes, and snippets.

@uu64
Last active October 24, 2021 14:13
Show Gist options
  • Save uu64/93c5b99be2629c7be54f3c353253ae20 to your computer and use it in GitHub Desktop.
Save uu64/93c5b99be2629c7be54f3c353253ae20 to your computer and use it in GitHub Desktop.
Comparison of string compression algorithms in nodejs
#!/usr/bin/env node
const { Buffer } = require("buffer")
const {
brotliCompressSync,
deflateSync,
gzipSync,
} = require("zlib")
const toBase64 = (str) => {
return Buffer.from(str).toString("base64url")
}
const compressDeflate = (str) => {
const compressed = deflateSync(str).toString("base64url")
return compressed
}
const compressGzip = (str) => {
const compressed = gzipSync(str).toString("base64url")
return compressed
}
const compressBrotli = (str) => {
const compressed = brotliCompressSync(str).toString("base64url")
return compressed
}
const print = (str) => {
console.log(`data: ${str}, len: ${str.length}`)
const base64 = toBase64(str)
console.log(`to base64url: ${base64}, len: ${base64.length}`)
const deflate = compressDeflate(str)
console.log(`deflate and to base64url: ${deflate}, len: ${deflate.length}`)
const gzip = compressGzip(str)
console.log(`gzip and to base64url: ${gzip}, len: ${gzip.length}`)
const brotli = compressBrotli(str)
console.log(`brotli and to base64url: ${brotli}, len: ${brotli.length}`)
console.log()
}
const id = "abcdefg_123x456_123y123z123c"
const obj = {
id: id,
name: "John Smith",
age: 30,
address: "Tokyo, Japan",
}
print(id)
print(JSON.stringify(obj))
@uu64
Copy link
Author

uu64 commented Oct 24, 2021

The result is the following.

data: abcdefg_123x456_123y123z123c, len: 28
to base64url: YWJjZGVmZ18xMjN4NDU2XzEyM3kxMjN6MTIzYw, len: 38
deflate and to base64url: eJxLTEpOSU1Ljzc0Mq4wMTUD0ZVAXAXEyQCArwhA, len: 40
gzip and to base64url: H4sIAAAAAAAAE0tMSk5JTUuPNzQyrjAxNQPRlUBcBcTJAMlamxQcAAAA, len: 56
brotli and to base64url: iw2AYWJjZGVmZ18xMjN4NDU2XzEyM3kxMjN6MTIzYwM, len: 43

data: {"id":"abcdefg_123x456_123y123z123c","name":"John Smith","age":30,"address":"Tokyo, Japan"}, len: 91
to base64url: eyJpZCI6ImFiY2RlZmdfMTIzeDQ1Nl8xMjN5MTIzejEyM2MiLCJuYW1lIjoiSm9obiBTbWl0aCIsImFnZSI6MzAsImFkZHJlc3MiOiJUb2t5bywgSmFwYW4ifQ, len: 122
deflate and to base64url: eJyrVspMUbJSSkxKTklNS483NDKuMDE1A9GVQFwFxMlKOkp5ibmpQFVe-Rl5CsG5mSUZQLHEdKCQsQGQkZJSlFpcDJQPyc-uzNdR8EosSMxTqgUA0BobZA, len: 118
gzip and to base64url: H4sIAAAAAAAAE6tWykxRslJKTEpOSU1Ljzc0Mq4wMTUD0ZVAXAXEyUo6SnmJualAVV75GXkKwbmZJRlAscR0oJCxAZCRklKUWlwMlA_Jz67M11HwSixIzFOqBQB8-QwYWwAAAA, len: 134
brotli and to base64url: G1oA4B0JduyEG8fgzgiVDlE3StVsvoBDq2b-IKhfhlGlpQ5Ln1OOA-WoAMOAtB3kHXCcZhJV2z0_N6DU1sfMzusJMakLXisRDtghrLNOwuxQKygDtNfdYnZOeA, len: 122

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment