私はゲームグループのウェブサイトを作っており、ゲーム開発者が提供する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
ステートメントでループしていることだと思います。これを防ぐために、私はどのような代替方法を使用できますか?
のような、より良いdirはJSON URLがないあなたのコード、それが遅い、問題となっている設定。 URLの応答が遅い場合は、PHPが応答を待ってから処理を進めることは明らかです。あなたはさらに、foreach内でapi urlを再び呼び出して応答を遅くします。 –
AngularJSのようなものを使用して、ページ上の要素をモデルにバインドすることができます。ページの結果が表示されるまでの時間は同じですが、ハングしているようには見えません。エンドポイントが遅い場合、PHPの出力は遅くなります。 – KRONWALLED