JS.压缩&解压缩

1、在 度娘搜索 “javascript 解压缩gzip”,基本都是 pako.js相关的内容,先记录下:

 js Gzip前台压缩字符串如何实现? - 知乎.html(https://www.zhihu.com/question/53169830

 Netty websocket 推送数据压缩以 js解压 - - ITeye博客.html(https://www.iteye.com/blog/zifeng412708-2320475

 JS GZIP压缩,GZIP解压_a_靖的博客-CSDN博客_js gzip.html(https://blog.csdn.net/qq_35713752/article/details/82079629

 

2、遇到实际问题:ArrayBuffer(base64编码的jpg图片数据) 数据过长,导致 转 javascript.string时报错:

  转换的操作:String.fromCharCode.apply(null, new Uint8Array(data)); // 这里的 data就是 websocket传来的数据(类型:ArrayBuffer) // ∵ 我Python传来的是 信息是byte数组,∴这里使用Uint8Array强转。其它情况可使用 Uint16Array等来强转

  报错信息:String.fromCharCode.apply(null, new Uint8Array(data))

 

 参考网址:(里面涉及到 一点点 pako的使用)

  String.fromCharCode.apply Maximum call stack size exceeded – 前端开发,JQUERY特效,全栈开发,vue开发.html(https://www.jqhtml.com/62603.html

   网页中代码保存:

    let strData = atob(result.data);
       // Convert binary string to character-number array
       let charData = strData.split('').map(function (x) { return x.charCodeAt(0); });

       // Turn number array into byte-array
       let binData = new Uint8Array(charData);
       // // unzip
       let array = pako.inflate(binData);    // ZC: pako 解压  <--  <--  <--
 
      // ZC: 很长的(8*1024字节)字符数字 转 字符串 的方案  <--  <--  <--  <--  <--
         strData = ''
         /**
          * String.fromCharCode.apply(null, array) 显示 Maximum call stack size exceeded
          * 超过最大调用堆栈大小
          */
         let chunk = 8 * 1024;
         let i;
         for (i = 0; i < array.length / chunk; i++) {
           strData += String.fromCharCode.apply(null, array.slice(i * chunk, (i + 1) * chunk));
         }
         strData += String.fromCharCode.apply(null, array.slice(i * chunk));
 
       // 将乱码的中文进行转换
       let jsonResult = decodeURIComponent(escape((strData)))

 

 

3、

4、

5、

 

posted @ 2020-06-23 14:13  Html5Skill  阅读(5709)  评论(0编辑  收藏  举报