在传输AIS数据时,由于返回的数据量过大,导致接口请求时间长,页面卡顿等问题。于是,通过采用压缩数据来提高接口响应速度。后台用了自带的gzip库。而前端解压使用库 pako.js。
接口返回压缩数据。(H4sIAAAAAAAAAA典型的base64头,以==结尾。为什么使用base64进行编码?为了传输一些不能用文字表示的io流。)。
解压后数据。
解压参考代码
private unzip(b64Data: string) {
let strData = atob(b64Data)
let charData = strData.split('').map((x) => {
return x.charCodeAt(0)
})
let binData = new Uint8Array(charData)
const data = pako.inflate(binData)
const array = new Uint16Array(data)
let res = ''
let chunk = 8 * 1024
let 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))
return decodeURIComponent(escape(res))
}