js 实现 gzip
使用 pako 库实现 Gzip 压缩与解压
pako 是一个流行的 JavaScript 库,支持 Gzip、Deflate 和 Zlib 格式的压缩与解压。以下是具体实现方法。
安装 pako:
npm install pako
压缩字符串:
import pako from 'pako';
const originalString = 'This is a string to be compressed with Gzip.';
const compressedData = pako.gzip(originalString);
const compressedString = String.fromCharCode.apply(null, compressedData);
console.log('Compressed:', compressedString);
解压字符串:

const charData = compressedString.split('').map(c => c.charCodeAt(0));
const restoredData = pako.ungzip(new Uint8Array(charData));
const restoredString = String.fromCharCode.apply(null, restoredData);
console.log('Decompressed:', restoredString);
使用浏览器内置 API(Compression Streams)
现代浏览器支持 Compression Streams API,可直接进行 Gzip 操作,无需第三方库。
压缩数据:
async function compressWithGzip(input) {
const stream = new Blob([input]).stream();
const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
const compressedBlob = await new Response(compressedStream).blob();
return await compressedBlob.arrayBuffer();
}
compressWithGzip('Test data').then(compressed => {
console.log('Compressed:', compressed);
});
解压数据:

async function decompressGzip(input) {
const stream = new Blob([input]).stream();
const decompressedStream = stream.pipeThrough(new DecompressionStream('gzip'));
const decompressedBlob = await new Response(decompressedStream).blob();
return await decompressedBlob.text();
}
decompressGzip(compressedData).then(decompressed => {
console.log('Decompressed:', decompressed);
});
Node.js 内置 zlib 模块
Node.js 原生支持 zlib 模块,可直接用于 Gzip 操作。
压缩文件或数据:
const zlib = require('zlib');
const fs = require('fs');
const input = 'Data to compress';
zlib.gzip(input, (err, buffer) => {
if (!err) {
fs.writeFileSync('output.gz', buffer);
}
});
解压文件或数据:
const compressedData = fs.readFileSync('output.gz');
zlib.gunzip(compressedData, (err, buffer) => {
if (!err) {
console.log('Decompressed:', buffer.toString());
}
});
注意事项
- 浏览器 API 兼容性:Compression Streams API 需要 Chrome >= 80 或 Firefox >= 111。
- 性能考虑:
pako适用于全平台,而浏览器 API 和 Node.js 原生模块性能更优。 - 二进制数据处理:压缩后的数据是二进制格式,需用
Uint8Array或ArrayBuffer处理。






