当前位置:首页 > JavaScript

js 实现 gzip

2026-02-01 12:18:18JavaScript

使用 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);

解压字符串:

js 实现 gzip

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);
});

解压数据:

js 实现 gzip

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 原生模块性能更优。
  • 二进制数据处理:压缩后的数据是二进制格式,需用 Uint8ArrayArrayBuffer 处理。

标签: jsgzip
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现表单验证提交表单提交表单提交

js实现表单验证提交表单提交表单提交

表单验证与提交的实现 在JavaScript中实现表单验证并提交表单,可以通过监听表单的提交事件,进行验证后决定是否提交。以下是实现方法: 基础表单验证 通过监听表单的submit事件,阻止默认提交…

vue js 实现排序

vue js 实现排序

Vue.js 实现排序的方法 在 Vue.js 中实现排序可以通过多种方式完成,包括使用计算属性、方法或直接操作数据。以下是几种常见的实现方式: 使用计算属性排序 计算属性可以自动响应数据变化并重新…