最近项目中遇到个问题,需要把玩家本地的数据一股脑丢给服务端储存,但是数据量很大,于是想到先进行一次本地压缩。翻了一遍文档cocos官方居然没有提供压缩接口!!!
于是找了个第三方库:pako
引入pako
- 下载源文件:https://gitee.com/renew_old_romance/pako/repository/archive/master.zip
- 找到pako.js 一般在 pako-master\pako-master\dist
- 在项目assets中建一个"libs"文件夹
- 将pako.js 放入此"libs"文件中
- 在"资源管理器"中选中"pako.js"文件 在"属性检查器"中将"导入为插件"选项勾上 (我使用的版本2.4.3自己弹出对话框)
使用示例
//压缩
let str = "一生平安"
let a = pako.gzip(str)
//解压
let b = pako.ungzip(a, { to: "string" });
踩坑
比较费解的是压缩得到结果居然是个object, 不是字符串。
于是上传数据之前先转为字符串,以为这样便万无一失!
不出意外果然出了意外客户端拿到数据是字符串,当要解压时pako的解压却不接受字符串!只能再转换为object再解压。
/**压缩 */
static zip(ob:object){
let str = JSON.stringify(ob)
let dataStr = pako.gzip(str)
return String(dataStr)
}
/**解压缩 */
static unZip(str:string){
let arr = str.split(",")
let obStr = pako.ungzip(arr, { to: "string" })
return JSON.parse(obStr)
}
完结 请点赞