PHP(gzdeflate/gzinflate)+JS(pako)前后端数据压缩

boyanx3个月前技术教程14

在之前的一篇文章中我们介绍了PHP压缩函数的使用,但是只是说了服务相关的应用,今天我们结合前端实现数据压缩传输。

服务器对于客户端上传的数据一般都会有限制,例如:限制请求的body大小的限制,限制key数量等.

如果我们将数据压缩后再传回给服务器,这样就能规避很多限制的问题。

今天我们就结合前端实践一下数据压缩传输!

服务器压缩:

服务器压缩函数有三个,不了解的可以看看我之前的文章【php压缩函数总结与实际应用】。这里以【gzinflate】为例:

base64_encode(gzdeflate('待压缩的内容'))

注意:待压缩的内容必须是字符串,压缩后的内容需要进行base64编码以防其他问题出现

前端解压缩

由于服务器返回的是base64格式的数据,我们需要进行base64解码:

// base64字符串转为uint8array数组
function base64ToUint8Array(base64String) {
  let padding = '='.repeat((4 - base64String.length % 4) % 4);
  let base64 = (base64String + padding)
    .replace(/\-/g, '+')
    .replace(/_/g, '/');
  let rawData = window.atob(base64);
  let outputArray = new Uint8Array(rawData.length);
  for (var i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }
  return outputArray;
}

base64解码之后,就可以使用【pako】进行解压缩。前端需要安装【pako】扩展:

npm install pako

安装好解压缩扩展后,我们就可以使用【pako】进行解压缩:

pako.inflateRaw(base64ToUint8Array(res.data.description),{to:'string'})

前端压缩数据

上面我们已经实现服务器压缩数据,客户端解压缩。但是客户端还没有实现数据压缩,服务器解压缩数据。

首先使用【pako】扩展压缩数据:

pako.deflateRaw('压缩的内容', {to:'string'})

获得压缩数据后再将数据转base64格式,上传base64格式数据:

// uint8array转为base64字符串
function uint8arrayToBase64(u8Arr) {
  return window.btoa(u8Arr);
}
//数据压缩并将压缩后的内容转base64编码
uint8arrayToBase64(pako.deflateRaw('压缩内容', {to:'string'}))

服务器解压缩

服务接受的时base64格式的数据,所以我们需要先base解码,再将数据解压缩:

gzinflate(base64_decode('客户端数据'))

最后再将数据存储在服务,这样就完成了服务器与前端结合实现数据压缩及解压缩了

有遗漏或者不对的可以在我的公众号留言哦

相关文章

缩小字符串( Compact String)和 压缩字符串(Compressed String)

正如我们在上面文章提到的内容,在英文语境中上面 2 个方法还是有区别的,在中文环境下主要表达就是字符串压缩。JDK 6 使用的压缩字符串方法,主要原因是我们修改了 String 的存储结构,char[...

如何用2 KB代码实现3D赛车游戏?2kPlus Jam大赛了解一下

选自frankforce作者:Frank机器之心编译参与:王子嘉、Geek AI控制复杂度一直是软件开发的核心问题之一,一代代的计算机从业者纷纷贡献着自己的智慧,试图降低程序的计算复杂度。然而,将一款...

常见的序列化框架及Protobuf原理

享学课堂作者:逐梦々少年简书ID:逐梦々少年转载请声明出处!上次我们详细的学习了Java中的序列化机制,但是我们日常开发过程中,因为java的序列化机制的压缩效率问题,以及序列化大小带来的传输的效率问...

Java实现LWZ压缩算法

本篇目录 通过阅读本篇文章你可以学习到: 什么是LWZ压缩算法发展历程实现思路Java代码实现什么是LWZ压缩算法LWZ 是一种通过建立字符串字典, 用较短的代码来表示较长的字符串来实现压缩的无损压缩...

JS 图片简易压缩【实践】

JS 图片简易压缩【实践】

作者:政采云前端团队转发链接:https://juejin.im/post/5ea574cc518825736e57fcca前言说起图片压缩,大家想到的或者平时用到的很多工具都可以实现,例如,客户端类...

一文带你搞懂JS实现压缩图片

作者:wuwhs 转发链接:https://segmentfault.com/a/1190000023486410前言公司的移动端业务需要在用户上传图片是由前端压缩图片大小,再上传到服务器,这样可以减...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。