我正在为一个游戏组织制作网站,并且他们希望使用游戏开发者提供的API将他们的公会信息添加到他们的网站上。我正在使用的API有以下几点:当从.json文件循环结果时页面加载速度缓慢
https://wiki.guildwars2.com/wiki/API:1/item_details https://wiki.guildwars2.com/wiki/API:2/guild/:id/treasury
现在,我有一个表,显示在国库,有多少,有多少需要什么样的项目。它看起来像这样:
Item name | Quantity | Needed
-----------------------------------------------------
Iron Ore | 150 | 1500
Mithril Ingot | 134 | 1000
etc...
,这是我的PHP代码:
// This gets a particular item.
function getItem($id) {
$response = file_get_contents("https://api.guildwars2.com/v1/item_details.json?item_id=".$id);
$response = json_decode($response, false);
return $response;
}
// This gets the name if item 123
// echo getItem(123)->name;
// Begin table.
echo '<table class="table table-striped">';
$treasuryItem = file_get_contents('https://api.guildwars2.com/v2/guild/B95A3B40-A764-4648-8EE6-39549E922A99/treasury?access_token=358AC6CB-0596-D64F-88D5-5CFA9AA27AAA273F3C6A-BC9E-47EE-AA28-63565C3EFEEE');
$treasuryItem = json_decode($treasuryItem);
foreach($treasuryItem as $key => $treasuryItem) {
echo '<tr>';
echo '<td>'.getItem($treasuryItem->item_id)->name.'</td>'; // This is where I think the trouble lies.
echo '<td>'.$treasuryItem->count.'</td>';
echo '<td>';
foreach($treasuryItem->needed_by as $key => $treasuryItem) {
echo $treasuryItem->count.'<br />';
}
echo '</td>';
echo '</tr>';
}
echo '</table>';
目前的情况是,它的工作原理和信息显示,因为我想它是。我的问题是页面加载需要很长时间。我认为问题在于调用Item API文件的函数在foreach
语句中循环。我可以用什么替代方法来防止这种情况发生?
JSON的网址是一个问题,那就是缓慢的,不是你的代码。如果url响应很慢,很明显php会等待响应,然后继续。更多的是你再次在foreach中调用api url的n,这会使得响应更慢 –
你可以使用类似AngularJS的东西来将页面上的元素绑定到模型。直到你在页面上看到结果的时间将是相同的,但它不会挂起。如果端点很慢,你的PHP输出将会很慢。 – KRONWALLED