js 实现 gzcompress
使用 zlib 库进行 Gzip 压缩
在 JavaScript 中可以通过 zlib 模块实现 Gzip 压缩功能,该模块是 Node.js 内置模块无需额外安装。以下是一个完整的示例代码:
const zlib = require('zlib');
function gzcompress(input) {
return new Promise((resolve, reject) => {
zlib.gzip(input, (err, buffer) => {
if (err) return reject(err);
resolve(buffer);
});
});
}
// 使用示例
const input = '需要压缩的文本内容';
gzcompress(input)
.then(compressed => console.log(compressed))
.catch(err => console.error(err));
浏览器端实现方案
在浏览器环境中可以使用 pako 库实现 Gzip 压缩:
// 首先需要引入 pako 库
// <script src="https://cdnjs.cloudflare.com/ajax/libs/pako/1.0.11/pako.min.js"></script>
function gzcompress(input) {
return pako.gzip(input);
}
// 使用示例
const input = '需要压缩的文本内容';
const compressed = gzcompress(input);
console.log(compressed);
处理字符串输入输出
如果需要处理字符串而非 Buffer,可以添加编码转换:
const zlib = require('zlib');
async function gzcompressString(input) {
const buffer = await new Promise((resolve, reject) => {
zlib.gzip(input, (err, buffer) => {
if (err) return reject(err);
resolve(buffer);
});
});
return buffer.toString('base64'); // 转换为Base64字符串
}
// 使用示例
const text = '需要压缩的长文本内容';
gzcompressString(text)
.then(compressed => console.log('压缩结果:', compressed))
.catch(err => console.error(err));
解压缩实现
对应的解压缩函数实现:
function gzuncompress(input) {
return new Promise((resolve, reject) => {
zlib.gunzip(input, (err, buffer) => {
if (err) return reject(err);
resolve(buffer.toString());
});
});
}
性能优化建议
对于大文件处理建议使用流式处理:
const fs = require('fs');
const zlib = require('zlib');
function gzcompressFile(inputPath, outputPath) {
const gzip = zlib.createGzip();
const input = fs.createReadStream(inputPath);
const output = fs.createWriteStream(outputPath);
return new Promise((resolve, reject) => {
input.pipe(gzip).pipe(output);
output.on('finish', resolve);
output.on('error', reject);
});
}
这些方法覆盖了 Node.js 和浏览器环境下的 Gzip 压缩需求,可以根据具体场景选择适合的实现方案。







