js 实现 gzip
使用 pako 库实现 Gzip 压缩与解压缩
pako 是一个流行的 JavaScript 库,支持 Gzip、Deflate 和 Zlib 压缩算法。安装方式如下:
npm install pako
压缩字符串示例:
import pako from 'pako';
const originalString = 'This is a sample string to compress with Gzip.';
const compressedData = pako.gzip(originalString);
const compressedString = String.fromCharCode.apply(null, compressedData);
console.log('Compressed:', compressedString);
解压缩字符串示例:
const restoredData = pako.ungzip(compressedData);
const restoredString = String.fromCharCode.apply(null, restoredData);
console.log('Original:', restoredString);
使用 Node.js 内置 zlib 模块
Node.js 原生支持 zlib 模块,无需额外安装。

压缩示例:
const zlib = require('zlib');
const originalBuffer = Buffer.from('Text to compress');
zlib.gzip(originalBuffer, (err, compressedBuffer) => {
if (!err) console.log('Compressed:', compressedBuffer.toString('base64'));
});
解压缩示例:

zlib.gunzip(compressedBuffer, (err, decompressedBuffer) => {
if (!err) console.log('Decompressed:', decompressedBuffer.toString());
});
浏览器端使用 CompressionStream API
现代浏览器支持原生压缩 API(需检查兼容性)。
压缩示例:
const stream = new Blob(['Input data']).stream();
const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
const chunks = [];
for await (const chunk of compressedStream) {
chunks.push(chunk);
}
const compressedBlob = new Blob(chunks);
解压缩示例:
const decompressedStream = compressedBlob.stream().pipeThrough(
new DecompressionStream('gzip')
);
注意事项
- 跨环境兼容性:Node.js 与浏览器的实现方式不同,需根据运行环境选择方案。
- 二进制处理:压缩结果通常为
Uint8Array或Buffer,需妥善处理编码转换。 - 性能考虑:大文件建议使用流式处理,避免内存问题。
以上方法覆盖了主流 JavaScript 环境下的 Gzip 实现需求。






