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

Like (0)
guozi的头像guozi
Previous 2024年6月7日 上午9:17
Next 2024年6月7日

相关推荐

  • 如何选择适合自己的国产GPU服务器?

    云服务器行业近年来发展迅速,为用户提供了更加灵活和便捷的数据存储和处理方式。其中,GPU服务器作为一种高性能的计算平台,受到越来越多用户的青睐。然而,在众多的GPU服务器品牌中,如…

    行业资讯 2024年4月5日
    0
  • GPU服务器租赁的优势有哪些?

    随着科技的发展,云服务器行业也日益兴起。而在这个行业中,GPU服务器租赁备受瞩目。那么,什么是GPU服务器?它又有哪些优势呢?今天,我们就来探讨一下GPU服务器租赁的意义与需求,以…

    行业资讯 2024年3月19日
    0
  • 怎么查询域名是否被墙了,查询域名是否被k

    如果在查询结果中发现某个域名被标记为“已屏蔽”,则说明该域名已被屏蔽或已被屏蔽。这可能是因为该网站包含非法内容或活动,或者该网站使用的IP地址已被封锁。用户目前无法成功访问该网站。…

    行业资讯 2024年5月11日
    0
  • 如何关闭腾讯云服务器?

    想要关闭腾讯云服务器,是不是觉得有些麻烦?别担心,今天我就来教你如何轻松完成这个操作。腾讯云服务器作为云计算领域的重要一员,为用户提供了强大的计算和存储能力。但是,当您不再需要使用…

    行业资讯 2024年4月8日
    0

发表回复

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