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的头像guozi
上一篇 2024年6月7日 上午9:17
下一篇 2024年6月7日

相关推荐

  • 如何搭建一个高效的云服务器?

    现在,随着信息技术的快速发展,云服务器行业也越来越受到人们的关注。云服务器作为一种新兴的网络服务方式,其高效性和灵活性备受企业和个人用户的青睐。但是,如何搭建一个高效的云服务器却是…

    行业资讯 2024年4月8日
    0
  • 如何有效地推广购物网站?

    想必大家都有在网上购物的经历,但是你知道如何有效地推广购物网站吗?今天我将为大家介绍一些关于购物网站推广的知识,让你轻松掌握推广的技巧。什么是购物网站?为什么需要推广购物网站?推广…

    行业资讯 2024年4月18日
    0
  • 网站被攻击是什么意思,网站被攻击了一般多久可以恢复

    黑客可能会利用技术手段创建类似于合法网站的虚假网站,以诱骗用户泄露其个人信息或财产。这种类型的攻击可能会产生更严重的影响,因为用户很难区分真假网站。 1、网站无法正常运行,给用户带…

    行业资讯 2024年5月9日
    0
  • 服务器内存一般多大合适

    在如今的网络行业中,服务器内存的大小一直备受关注。究竟什么是服务器内存?它又有着怎样的作用和重要性?如何选择合适的大小?不同类型的服务器又需要多大的内存呢?让我们一起来探索这个备受…

    行业资讯 2024年4月3日
    0

发表回复

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