PHP+JS(pako)实现前后端数据压缩,为服务器节省带宽

一、准备工具

1.pako脚本库

github地址: https://github.com/nodeca/pako

2.前端Uint8Array与Base64互转函数(代码如下)

// uint8array转为base64字符串
function uint8arrayToBase64(u8Arr) {
let CHUNK_SIZE = 0x8000; //arbitrary number
let index = 0;
let length = u8Arr.length;
let result = ”;
let slice;
while (index < length) {
slice = u8Arr.subarray(index, Math.min(index + CHUNK_SIZE, length));
result += String.fromCharCode.apply(null, slice);
index += CHUNK_SIZE;
}
// web image base64图片格式: “data:image/png;base64,” + b64encoded;
// return  “data:image/png;base64,” + btoa(result);
return btoa(result);
}
// 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;
}

二、具体用法案例

1.前端JS压缩+后端PHP解压

JS压缩

// JS压缩,注意:需要引入dist/pako_deflate.js(仅支持压缩)或dist/pako.js(支持压缩和解压)
var rawData = {title:”this is pako.defalte test”,author:
“slongzhang@qq.com”, date: “2021-04-02”, content: “test test test test test
test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test
“}
var binaryString = pako.deflateRaw(JSON.stringify(rawData), { to: ‘string’ });
var compressedBase64  = uint8arrayToBase64(binaryString);
console.log(compressedBase64);// q1YqySzJSVWyUirJyCxWAKKCxOx8vZTUtMScklSFktTiEiUdpcTSkoz8IqCi4pz8vPSqjMS8dIfCQr3k/FygZEpiCUi/kYGRoa6Bia6BEVAsOT+vJDWvBGQs0ASFUWKUwEco1QIA
图片
PHP解压
// PHP解压
$base64String = ‘q1YqySzJSVWyUirJyCxWAKKCxOx8vZTUtMScklSFktTiEiUdpcTSkoz8IqCi4pz8vPSqjMS8dI
fCQr3k/FygZEpiCUi/kYGRoa6Bia6BEVAsOT+vJDWvBGQs0ASFUWKUwEco1QIA’;

print_r(gzinflate(base64_decode($base64String)));

图片

 

2.后端PHP压缩+前端JS解压

PHP压缩
// php压缩
$array = array(
“title”       => “this is pako.defalte test”,
“author”      => “slongzhang@qq.com”,
“date”        => “2021-04-02”,
“content”       => “test test test test test test test test test test
test test test test test test test test test test test test test test
test test test test test test test test test test test test test test
test test test test test test test test test test test test test test
test test test test test test test test test test test test test test
test test test test test test test test test test test test test test
test test test test test test test test test test test test test test
test test test test test test test test test test test test test test
test test”

);
function compress($str) { return base64_encode(gzdeflate($str, 9)); }
echo compress(json_encode($array,256));
// q1YqySzJSVWyUirJyCxWAKKCxOx8vZTUtMScklSFktTiEiUdpcTSkoz8IqCi4pz8vPSqjMS8d
//IfCQr3k/FygZEpiCUi/kYGRoa6Bia6BEVAsOT+vJDWvBGQs0ASFUWKUwEco1QIA

图片

JS解压

// JS解压,注意:需要引入dist/pako_inflate.js(仅支持压缩)或dist/pako.js(支持压缩和解压)
var decompress = function(str){
return pako.inflateRaw(base64ToUint8Array(str), {to: ‘string’});
}
var rawData = decompress(‘q1YqySzJSVWyUirJyCxWAKKCxOx8vZTUtMScklSFktTiEiUdpcTSkoz8IqCi4pz
8vPSqjMS8dIfCQr3k/FygZEpiCUi/kYGRoa6Bia6BEVAsOT+vJDWvBGQs0ASFUWKUwEco1QIA’
);
console.log(rawData);
图片
三、注意事项
1.前端JS
必须引入Uint8Array与Base64互转函数
如果不需要同时处理压缩和解压可按需单独引入脚本pako_deflate.min.js(压缩)| pako_inflate.min.js(解压);
如果需要同时处理压缩和解压那么请直接引入pako.min.js
图片

 

2.PHP要求(PHP 5.6, PHP 7, PHP 8)

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/90602.html

(0)
guozi's avatarguozi
上一篇 2024年6月7日 上午9:17
下一篇 2024年6月7日 上午9:51

相关推荐

  • 如何评测新加坡服务器主机的配置与性能?

    新加坡作为亚洲最具发展潜力的国家之一,其服务器主机备受关注。但是如何评测新加坡服务器主机的配置与性能却是一个备受困扰的问题。随着网络行业的不断发展,选择一款适合自己的服务器主机变得…

    行业资讯 2024年3月20日
    0
  • 怎样绑定泛解析域名?

    近年来,随着互联网行业的发展,越来越多的网站开始使用泛解析域名。那么,什么是泛解析域名?它有什么作用和优势?如何购买和设置?更重要的是,怎样绑定泛解析域名到自己的网站?如果你也想了…

    行业资讯 2024年3月25日
    0
  • 如何快速租用阿里云服务器?

    想要拥有高效稳定的服务器,阿里云服务器无疑是最佳选择。但是很多人对于如何快速租用阿里云服务器还感到困惑。别担心,本文将为您揭开这个秘密。首先,让我们先来了解什么是云服务器?随后,我…

    行业资讯 2024年4月9日
    0
  • 硬件信息检测神器

    HWiNFO是一个专业的系统信息检测工具,支持最新的技术和标准,可检查计算机硬件的所有信息。HWiNFO中文版主要可以显示出处理器、主板及芯片组、PCMCIA接口、BIOS版本、内…

    2024年5月31日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注