概述
ws推送或这接口返回的数据经过gzip压缩能减少大量的传输数据,减少传输数据消耗
但是需要在收到数据之后解压。
前端解压就可以用到pako了
下载与引入pako
下载:npm install pako
引入:import pako from “pako”
定义解压和压缩的方法
import pako from "pako";
Vue.prototype.$zip = function (str){
var binaryString = pako.gzip(encodeURIComponent(str), { to: 'string' })
return btoa(binaryString);
}
Vue.prototype.$unzip = function (b64Data) {
var strData = atob(b64Data);
// 将二进制字符串转换为字符数数组
var charData = strData.split("").map(function (x) {
return x.charCodeAt(0);
});
// 把数字数组转换成字节数组
var binData = new Uint8Array(charData);
// 解压
var data = pako.inflate(binData);
//将解压缩完成的的byteArray转换回ascii字符串:
var strData = new TextDecoder("utf-8").decode(data);//大数据使用此方法
//var strData
= String.fromCharCode.apply(null, new Uint16Array(data));//数据不是很多可以使用此方法
return decodeURIComponent(strData);
};
方法调用:
压缩:this.$zip(“需要压缩的内容”)
解压缩:this.$zip(“需要解压缩的内容”)
注意事项:
1、pako解决中文乱码:
压缩前:
pako.gzip(encodeURIComponent(str), { to: ‘string’ })
解压完成后:
return decodeURIComponent(strData)
2、大数据解压
将解压缩完成的的byteArray转换回ascii字符串,推荐使用new TextDecoder(“utf-8”).decode(data)
也可以封装
export function zipJson (str) {
var binaryString = pako.gzip(encodeURIComponent(str), { to: 'string' })
return btoa(binaryString)
}
export function unzipJson (b64Data) {
var strData = atob(b64Data)
// Convert binary string to character-number array
var charData = strData.split('').map(function (x) { return x.charCodeAt(0) })
// Turn number array into byte-array
var binData = new Uint8Array(charData)
// // unzip
var data = pako.inflate(binData)
// Convert gunzipped byteArray back to ascii string:
// strData
= String.fromCharCode.apply(null, new Uint16Array(data));
var array = new Uint16Array(data)
var res = ''
var chunk = 8 * 1024
var i
for (i = 0; i < array.length / chunk; i++) {
res += String.fromCharCode.apply(null, array.slice(i * chunk, (i + 1) * chunk))
}
res += String.fromCharCode.apply(null, array.slice(i * chunk))
strData = res
return decodeURIComponent(strData)
}
import {isAuth, treeDataTranslate, transOrg, transUser, transDict, datePattern, zipJson, unzipJson} from '@/utils'
// 挂载全局
Vue.prototype.zipJson = zipJson
Vue.prototype.unzipJson = unzipJson
最后
以上就是动人唇彩为你收集整理的前端压缩、解压缩之gzip+pako.js的全部内容,希望文章能够帮你解决前端压缩、解压缩之gzip+pako.js所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复