js 接收 PHP gzcompress 数据
2019-10-11 本文已影响0人
_不能说的秘密i
由于一些文章内的数据是图文混排的, 中间还掺杂着html代码的, 此时如果 PHP 直接返回就会导致请求特别忙,
所以考虑压缩字符串然后base64响应给客户端, 客户端使用 pako.js 来转换回 json
服务端
<?php
// 模拟一个json数据
// 使用 gzcompress 压缩
// base64编码 压缩过的字符串 响应给前端
$json = json_encode( [
'id' => 1001,
'name' => 'alex',
]);
$gzstr = gzcompress($json);
exit(base64_encode($gzstr));
客户端
<script src="https://cdn.bootcss.com/axios/0.19.0/axios.min.js"></script>
<script src="./js/pako.js"></script>
axios
.get("test.com")
.then(({ data }) => {
console.log("---base64:", data);
// 解码base64
data = atob(data);
// 将base64解码后的字符串解压
data = pako.inflate(data, { to: 'string' });
console.log(data);
})
.catch(err => {
console.log(err);
})
注意
- node 环境没有
atob
和btoa
函数, 也就是说 nodejs 做服务端的时候需要安装js-base64
- node 环境有
zlib
相关处理模块
const axios = require("axios");
const zlib = require('zlib');
axios
.get("test.com")
.then(({data}) => {
console.log("---base64---", data);
data = zlib.inflateSync(new Buffer(data, 'base64')).toString();
console.log(data);
})
.catch(err => {
console.log(err);
});