Ich mache eine Website für eine Gaming-Gruppe und sie möchten ihre Gildeninformationen auf ihrer Website mit der von den Spieleentwicklern bereitgestellten API hinzufügen. Die APIs Ich arbeite mit sind die folgenden:Langsames Laden der Seite beim Loopen von Ergebnissen aus einer .json-Datei
https://wiki.guildwars2.com/wiki/API:1/item_details https://wiki.guildwars2.com/wiki/API:2/guild/:id/treasury
Gerade jetzt, ich habe eine Tabelle zu zeigen, welche Elemente in der Kasse sind, wie viele und wie viele benötigt werden. Es sieht wie folgt aus:
Item name | Quantity | Needed
-----------------------------------------------------
Iron Ore | 150 | 1500
Mithril Ingot | 134 | 1000
etc...
Und das ist mein PHP-Code:
// 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>';
Wie es jetzt aussieht, es funktioniert und die Informationen angezeigt, wie ich es möchte sein. Mein Problem ist, dass das Laden der Seite sehr lange dauert. Ich denke, das Problem ist, dass die Funktion, die die Item-API-Datei aufruft, in der foreach
-Anweisung geloopt wird. Mit welcher alternativen Methode kann dies verhindert werden?
Die json url ist ein Problem, das ist langsam, nicht Ihr Code einrichten. Wenn die URL-Antwort langsam ist, ist es offensichtlich, dass PHP auf die Antwort von ihm wartet und dann fortfahren. und noch mehr rufst du die api-urls wieder in der foreach an, was die Antwort noch langsamer macht. –
Du kannst etwas wie AngularJS verwenden, wo du die Elemente auf deiner Seite an ein Modell binden würdest. Die Zeit, bis Sie die Ergebnisse auf der Seite sehen, wäre die gleiche, aber sie würde nicht hängen bleiben. Wenn der Endpunkt langsam ist, wird Ihre PHP-Ausgabe langsam sein. – KRONWALLED