php压缩json数据
最近在优化一个页面:ajax请求异步数据,特定情况下,json数据达到100MB左右,仅数据传输时间就需要10-20s左右,简直太慢了。
检索资料看怎么压缩json数据
方法1:
使用ob_start回调函数ob_gzhandler来对数据进行压缩,Ajax接收到的是json数据
<?php ini_set('memory_limit', -1); ini_set('zlib.output_compression_level', 1); //设置压缩级别,默认6 ob_start('ob_gzhandler'); //压缩数据 header('Content-Type: application/json'); $data = []; for ($i = 0; $i < 3000000; $i++) { $data[] = ['name' => '中文a' . $i, 'age' => random_int(10, 99)]; } echo json_encode($data);
<script src="./plugins/jquery/jquery-3.6.0.min.js"></script> <script> $.ajax({ url: "http://localhost:3000/php-demos/test.php", method: "get", dataType: "json", success: function (res) { console.log(res); }, error: function (xhr, err) { console.log(err); }, }); </script>
方法2:
使用gzcompress()等函数进行压缩,ajax接收到文本数据,需进行转换处理
<?php ini_set('memory_limit', -1); $data = []; for ($i = 0; $i < 3000000; $i++) { $data[] = ['name' => '中文a' . $i, 'age' => random_int(10, 99)]; } $json = json_encode($data); // $json = gzdeflate($json, 1); $json = gzcompress($json, 1); // $json = gzencode($json, 1); $json = base64_encode($json); echo $json;
<script src="./plugins/jquery/jquery-3.6.0.min.js"></script> <script src="./plugins/pako.min.js"></script> <script> $.ajax({ url: "http://localhost:3000/php-demos/test-gz.php", method: "get", dataType: "text", success: function (res) { console.log(res); var strData = base64ToUint8Array(res); var data = JSON.parse(pako.inflate(strData, { to: "string" })); console.log(data); }, error: function (xhr, err) { console.log(err); }, }); // 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; } </script>
上面base64ToUint8Array算法来自网络
本地测试结果:
放到server上看下效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix