之前分享了《 前端实现本地文件夹打包成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));
}