pako插件——数据压缩利器工具

pako插件——数据压缩利器工具

pako认识

项目开发中常常会遇到前后端之间有大量数据传输占用带宽导致页面响应慢的问题,这时候我们可以考虑使用Pako.js插件对信息进行压缩之后传输

压缩

在将pako.js引入前端页面中后,可以在浏览器中查看其内部结构,如图所示
pako类在浏览器中查看效果图

pako源码探究

常用解释
deflate(data[, options]) -> Uint8Array压缩函数, input类型 UInt8Array或者string ,返回类型为UInt8Array
inflate(data[, options]) -> Uint8Array|String解压缩函数, input类型 UInt8Array或者string ,返回类型为UInt8Array;如果options:{to:‘string’},则返回string字符串
gzip(data[, options]) -> Uint8Array压缩函数, input类型 UInt8Array或者string ,返回类型为UInt8Array 。The same as [[deflate]], but create gzip wrapper instead of deflate one.
ungzip(input,options)解压缩函数, input类型 UInt8Array或者string ,返回类型为UInt8Array;如果options:{to:'string'},则返回string字符串。Decompress data with inflate/ungzip and options

实战

let rawData={name:'郜超超',age:25,sex:'男',hobbies:['篮球','排球','乒乓球'],married:false};
rawData
{name: "郜超超", age: 25, sex: "男", hobbies: Array(3), married: false}
let a=JSON.stringify(rawData);
a
"{"name":"郜超超","age":25,"sex":"","hobbies":["篮球","排球","乒乓球"],"married":false}"
/**
*以下是压缩步骤
encodeURIComponnent将 / : ? 等字符转义,并支持中文压缩和解压缩
btoa将UInt8Array数组base64加密,最终得到压缩内容的base64密文字符串(可省略加密)
*/


let b=encodeURIComponent(a);
b
"%7B%22name%22%3A%22%E9%83%9C%E8%B6%85%E8%B6%85%22%2C%22age%22%3A25%2C%22sex%22%3A%22%E7%94%B7%22%2C%22hobbies%22%3A%5B%22%E7%AF%AE%E7%90%83%22%2C%22%E6%8E%92%E7%90%83%22%2C%22%E4%B9%92%E4%B9%93%E7%90%83%22%5D%2C%22married%22%3Afalse%7D"
let c=pako.deflate(b,{to:'string'});
c
Uint8Array(130) [120, 156, 109, 141, 205, 14, 194, 48, 12, 131, 159, 198, 119, 148, 82, 218, 28, 219, 45, 188, 71, 39, 2, 76, 98, 32, 173, 23, 30, 127, 221, 90, 254, 36, 46, 142, 21, 127, 178, 225, 34, 136, 238, 105, 210, 114, 96, 194, 170, 194, 240, 6, 220, 65, 60, 226, 1, 222, 126, 76, 73, 169, 43, 154, 46, 141, 39, 91, 31, 89, 159, 95, 5, 14, 188, 71, 116, 111, 252, 250, 24, 134, 81, 115, 35, 108, 108, 80, 56, 34, 200, 70, 239, 214, 197, 23, 13, 41, 91, 2,]
let d=window.btoa(c);
d
"MTIwLDE1NiwxMDksMTQxLDIwNSwxNCwxOTQsNDgsMTIsMTMxLDE1OSwxOTgsMTE5LDE0OCw4MiwyMTgsMjgsMjE5LDQ1LDE4OCw3MSwzOSwyLDc2LDk4LDMyLDE3MywyMywzMCwxMjcsMjIxLDkwLDI1NCwzNiw0NiwxNDIsMjEsMTI3LDE3OCwyMjUsMzQsMTM2LDIzOCwxMDUsMjEwLDExNCw5NiwxOTQsMTcwLDE5NCwyNDAsNiwyMjAsNjUsNjAsMjI2LDEsMjIyLDEyNiw3Niw3MywxNjksNDMsMTU0LDQ2LDE0MSwzOSw5MSwzMSw4OSwxNTksOTUsNSwxNCwxODgsNzEsMTE2LDExMSwyNTIsMjUwLDI0LDEzNCw4MSwxMTUsMzUsMTA4LDEwOCw4MCw1NiwzNCwyMDAsNzAsMjM5LDIxNCwxOTcsMjMsMTMsNDEsOTEsMiwxNjYsMTI3LDgxLDIzMywyMjksNDUsMTcwLDE5OCwyNTIsNDgsMTgyLDE3NSwyMTYsMTQ4LDIzMCwxMjEsMjEyLDgzLDIyMSw1OSwxNjcsOTEsODYsMTg0LDEyNiwxLDE0OCwxNyw1Miwx"


let e=atob(d);
e
"120,156,109,141,205,14,194,48,12,131,159,198,119,148,82,218,28,219,45,188,71,39,2,76,98,32,173,23,30,127,221,90,254,36,46,142,21,127,178,225,34,136,238,105,210,114,96,194,170,194,240,6,220,65,60,226,1,222,126,76,73,169,43,154,46,141,39,91,31,89,159,95,5,14,188,71,116,111,252,250,24,134,81,115,35,108,108,80,56,34,200,70,239,214,197,23,13,41,91,2,166,127,81,233,229,45,170,198,252,48,182,175,216,148,230,121,212,83,221,59,167,91,86,184,126,1,148,17,52,1"
let f=e.split(',').map(function(x){return parseInt(x);});
f
(130) [120, 156, 109, 141, 205, 14, 194, 48, 12, 131, 159, 198, 119, 148, 82, 218, 28, 219, 45, 188, 71, 39, 2, 76, 98, 32, 173, 23, 30, 127, 221, 90, 254, 36, 46, 142, 21, 127, 178, 225, 34, 136, 238, 105, 210, 114, 96, 194, 170, 194, 240, 6, 220, 65, 60, 226, 1, 222, 126, 76, 73, 169, 43, 154, 46, 141, 39, 91, 31, 89, 159, 95, 5, 14, 188, 71, 116, 111, 252, 250, 24, 134, 81, 115, 35, 108, 108, 80, 56, 34, 200, 70, 239, 214, 197, 23, 13, 41, 91, 2,]
let g=pako.inflate(f,{to:'string'};
g
"%7B%22name%22%3A%22%E9%83%9C%E8%B6%85%E8%B6%85%22%2C%22age%22%3A25%2C%22sex%22%3A%22%E7%94%B7%22%2C%22hobbies%22%3A%5B%22%E7%AF%AE%E7%90%83%22%2C%22%E6%8E%92%E7%90%83%22%2C%22%E4%B9%92%E4%B9%93%E7%90%83%22%5D%2C%22married%22%3Afalse%7D"
let h=decodeURIComponent(g);
h
"{"name":"郜超超","age":25,"sex":"","hobbies":["篮球","排球","乒乓球"],"married":false}"
let g2=pako.inflate(f);
g2
Uint8Array(235) [37, 55, 66, 37, 50, 50, 110, 97, 109, 101, 37, 50, 50, 37, 51, 65, 37, 50, 50, 37, 69, 57, 37, 56, 51, 37, 57, 67, 37, 69, 56, 37, 66, 54, 37, 56, 53, 37, 69, 56, 37, 66, 54, 37, 56, 53, 37, 50, 50, 37, 50, 67, 37, 50, 50, 97, 103, 101, 37, 50, 50, 37, 51, 65, 50, 53, 37, 50, 67, 37, 50, 50, 115, 101, 120, 37, 50, 50, 37, 51, 65, 37, 50, 50, 37, 69, 55, 37, 57, 52, 37, 66, 55, 37, 50, 50, 37, 50, 67, 37,]
let g_h=String.fromCharCode.apply(null,g2);
g_h
"%7B%22name%22%3A%22%E9%83%9C%E8%B6%85%E8%B6%85%22%2C%22age%22%3A25%2C%22sex%22%3A%22%E7%94%B7%22%2C%22hobbies%22%3A%5B%22%E7%AF%AE%E7%90%83%22%2C%22%E6%8E%92%E7%90%83%22%2C%22%E4%B9%92%E4%B9%93%E7%90%83%22%5D%2C%22married%22%3Afalse%7D"
g_h===g
true



注意事项

  • 如果压缩内容包含中文文本,压缩时需要使用encodeURIComponent来转移一下,解压时需要decodeURIComponent来转义回去。否则会出现中文乱码。
  • [x]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pako 是一个 JavaScript 实现的压缩解压库,可以用来压缩和解压多种格式的数据,包括 GZIP、DEFLATE、ZLIB 等。 下面是使用 pako 进行压缩和解压的示例代码: ```javascript // 压缩数据 var data = 'Hello, World!'; var compressed = pako.deflate(data, { level: 9 }); // 解压数据 var decompressed = pako.inflate(compressed); console.log(decompressed.toString()); ``` 在上面的代码中,我们首先定义了一个字符串 `data`,然后使用 `pako.deflate()` 方法将其压缩压缩级别为 9(最高级别)。接着,我们使用 `pako.inflate()` 方法对压缩后的数据进行解压,得到原始的字符串,并使用 `toString()` 方法将其转换为字符串类型。 需要注意的是,pako 只支持压缩和解压二进制数据,如果需要压缩和解压字符串,需要先将字符串转换为二进制数据,再进行操作。可以使用 `TextEncoder` 和 `TextDecoder` 对象来进行字符串和二进制数据之间的转换。例如: ```javascript // 将字符串转换为二进制数据 var encoder = new TextEncoder(); var data = encoder.encode('Hello, World!'); // 压缩数据 var compressed = pako.deflate(data, { level: 9 }); // 解压数据 var decompressed = pako.inflate(compressed); // 将二进制数据转换为字符串 var decoder = new TextDecoder(); console.log(decoder.decode(decompressed)); ``` 在上面的代码中,我们首先使用 `TextEncoder` 对象将字符串 `Hello, World!` 转换为二进制数据,然后进行压缩和解压操作。最后,使用 `TextDecoder` 对象将解压后的二进制数据转换为字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值