业务场景:需要传递图片base64给后端接口,但是base64太长了导致接口缓慢,就想到了压缩一下,参考了很多方法,但好像vite不支持zlib。
最后采用了pako:
const compressedData = pako.gzip(JSON.stringify(value));
const base64Data = btoa(String.fromCharCode.apply(null, compressedData));
但是这样写遇到了报错, "超出最大调用堆栈大小"
然后调整成如下方式:
const u8ArrData = pako.deflateRaw(value , {
to: "string",
});
let CHUNK_SIZE = 0x8000;
let index = 0;
let length = u8ArrData.length;
let result = '';
let slice;
while (index < length) {
slice = u8ArrData.subarray(index, Math.min(index + CHUNK_SIZE, length));
result += String.fromCharCode.apply(null, slice);
index += CHUNK_SIZE;
}
let newText = btoa(result)
这样写就没问题了,也不知道具体的原因,有知道的大神留言讲讲呗