之前分享了《 前端实现本地文件夹打包成zip压缩包 》,今天来分享前端实现GZIP压缩与解压。说到GZIP,一般会先想到 .gz 压缩包文件,以及对 Web 站点文件(主要是针对文本内容)采用GZIP压缩HTTP传输。本文要讲的是,前端对过大的传输消息内容进行GZIP压缩,主要是下面两种应用场景:

  • 过大的消息内容频繁发送,从网络流量方面考虑,希望得到降低;
  • 传输机制对消息内容大小有限制,比如,自定义的 WebSocket 消息。

废话不说,直接上干货。

import pako from 'pako';

/** 压缩文本字符串 */
export function zipText(str: string) {
  return Buffer.from(
    pako.gzip(encodeURIComponent(str))
  ).toString('base64');
}

/** 解压文本字符串 */
export function unzipText(str: string) {
  return decodeURIComponent(
    pako.ungzip(Buffer.from(str, 'base64'), { to: 'string' }),
  );
}

/** 生成对象的JSON字符串并压缩 */
export function zipObj(obj: Object) {
  return zipText(JSON.stringify(obj));
}

/** 解压JSON字符串并解析成对象 */
export function unzipObj(str: string) {
  return JSON.parse(unzipText(str));
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐