PHP多次调用API加载缓慢,如何实现单次请求解码复用数据
优化API请求与数据复用方案
你之前页面加载变慢的核心原因是重复执行了19次API请求和JSON解码——每次请求都要和服务器建立连接、传输数据,累积起来就拖慢了加载速度。只需要把API请求和JSON解码的逻辑仅执行一次,之后直接从已解码的数组中提取所有需要的参数即可。
基础实现方案(逐个提取参数)
这种方式适合参数结构差异较大的场景,直接明确提取每个参数:
<?php // 仅执行一次API请求与JSON解码 $apiResponse = file_get_contents('LINK DO API'); $decodedData = json_decode($apiResponse, true); $data = $decodedData['data']; // 提取并展示通道3温度 $tempCh3 = $data['temp_and_humidity_ch3']['temperature']; echo "通道3温度:" . $tempCh3['value'] . $tempCh3['unit'] . "<br>"; // 提取并展示通道3湿度 $humidityCh3 = $data['temp_and_humidity_ch3']['humidity']; echo "通道3湿度:" . $humidityCh3['value'] . $humidityCh3['unit'] . "<br>"; // 提取并展示通道1温度 $tempCh1 = $data['temp_and_humidity_ch1']['temperature']; echo "通道1温度:" . $tempCh1['value'] . $tempCh1['unit'] . "<br>"; // ... 继续添加剩余16个参数,直接从$data中读取即可,无需重复请求API ?>
简化实现方案(循环遍历参数)
如果你的参数有规律(比如都是不同通道的温湿度),可以用数组定义参数列表,通过循环批量展示:
<?php // 仅执行一次API请求与JSON解码 $apiResponse = file_get_contents('LINK DO API'); $decodedData = json_decode($apiResponse, true); $data = $decodedData['data']; // 定义需要展示的参数:键是显示名称,值是参数在$data中的层级路径 $paramsList = [ "通道3温度" => ['temp_and_humidity_ch3', 'temperature'], "通道3湿度" => ['temp_and_humidity_ch3', 'humidity'], "通道1温度" => ['temp_and_humidity_ch1', 'temperature'], "通道1湿度" => ['temp_and_humidity_ch1', 'humidity'], // ... 补充剩余15个参数的路径与显示名称 ]; // 循环展示所有参数 foreach ($paramsList as $label => $path) { $paramInfo = $data[$path[0]][$path[1]]; echo "{$label}:{$paramInfo['value']}{$paramInfo['unit']}<br>"; } ?>
核心逻辑说明
不管用哪种方式,都是只做一次API请求和一次JSON解码,之后所有参数都从内存中的数组直接读取,彻底避免了重复网络请求带来的耗时,页面加载速度会回到1秒以内。
内容的提问来源于stack exchange,提问作者Shamy
相关产品推荐
相关产品推荐

