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

相关推荐

  • 域名被墙啥意思,如何解决域名被墙

    5.尝试其他网络环境 您的域名可能被阻止,因为您的网络运营商限制了某些IP 地址。这种情况,您可以尝试在其他网络环境下访问该域名。例如,如果您无法访问工作中使用的网络上的特定网站,…

    行业资讯 2024年5月14日
    0
  • 如何通过云搜seo提升网站排名?

    想要让自己的网站在搜索引擎中排名靠前,吸引更多的流量和用户?那么你一定不能错过云搜SEO!它是一种通过优化网站内容和结构,提高网站在搜索引擎中的可见性和排名的技术。那么什么是搜索引…

    行业资讯 2024年4月9日
    0
  • 活跃ip监测和分析的重要性

    网络安全问题一直备受关注,随着技术的发展,攻击手段也愈加多样化。在这样的背景下,活跃IP监测和分析显得尤为重要。那么什么是活跃IP?它又有什么作用?如何进行监测和分析?本文将为您揭…

    行业资讯 2024年3月22日
    0
  • 金融app骗局,金融app风险

    近年来,随着互联网金融的快速发展,金融APP已经成为人们日常生活中不可或缺的一部分。然而,从那时起,针对金融应用程序的攻击有所增加。到底是什么原因导致这些攻击如此频繁地发生?攻击方…

    行业资讯 2024年5月6日
    0

发表回复

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