Optymalizacja skryptu PHP

0

Witam mam problem z poprawną optymalizacją skryptu. Zbiera on informacje o punktach i innych statystykach graczy należących do danego klanu w grze podczas eventu. Skrypt wykorzystuje api udostępnione przez twórców gry (JSON). Użytkownik na stronie wpisuje nazwę klanu, następnie skrypt pobiera ID szukanego klanu, wyciąga listę wszystkich graczy w klanie i po kolei zbiera informację o każdym z nich. I tu jest problem. Taki klan ma zwykle około 100 osób, co powoduje, że strona obecnie ładuje się około 12/15 sekund. Chciałbym to jakoś zoptymalizować, jeżeli się da, ale nie wiem jak.
Cały kod:

<html>
<head>
<script>
  window.addEventListener("load", function(){
     var load_screen = document.getElementById("load_screen");
      document.body.removeChild(load_screen);
    });
</script>
</head>
<body>
  <div id="load_screen"><div id="loading"><center><h1><b>Wczytuję</b></h1><br><img src="../eu/img/Preloader_11.gif" height="40%"></center></div></div>
</body>
</html>
<?php
echo '<form action="page.php" method="post">
  <input type="text" name="klan_name" placeholder="Klan Tag" maxlength="5" minlength="2" />
  <input type="submit" name="szukaj" value="Szukaj" />
</form>';
if(isset($_POST['szukaj'])){
  $position9k = file_get_contents('https://api.worldoftanks.eu/wot/globalmap/eventaccountratings/?application_id=id_aplikacji&event_id=fire_trail&front_id=fire_trail_bg&limit=10&page_no=800');
  $miejsce_nagroda = json_decode($position9k, true);
  $points_9k = $miejsce_nagroda['data'][9]['fame_points'];
  $klan = $_POST['klan_name'];
  $klan = htmlentities($klan);
  $klan = trim($klan);
  $szukamy_klanu = file_get_contents('https://api.worldoftanks.eu/wot/clans/list/?application_id=id_aplikacji&search='.$klan.'&limit=1&language=en');
  $decodedklan = json_decode($szukamy_klanu, true);
  foreach($decodedklan['data'] as $klan_tag){
     $klan_id = $klan_tag['clan_id'];
  }
  $json = file_get_contents('https://api.worldoftanks.eu/wot/clans/info/?application_id=id_aplikacji&clan_id='.$klan_id.'');
  $decodedJson = json_decode($json, true);
  foreach ($decodedJson['data'] as $liczba_graczy) {
    $liczba_czlonkow_klanu = $liczba_graczy['members_count'];
  }
  $x = 0;
  for($x=0; $x < $liczba_czlonkow_klanu; $x+1){
    foreach ($decodedJson['data'] as $klan_info) {
      $gracz = $klan_info['members'][$x]['account_name'];
      $gracz_id = $klan_info['members'][$x]['account_id'];
      $player_point = file_get_contents('https://api.worldoftanks.eu/wot/globalmap/eventaccountinfo/?application_id=id_aplikacji&account_id='.$gracz_id.'&event_id=fire_trail&front_id=fire_trail_bg');
      $decodedpoints = json_decode($player_point, true);
      foreach ($decodedpoints['data'] as $player_points) {
        echo $player_points['events']['fire_trail'][0]['fame_points'];
        echo '<br />';
      }
      $x = $x+1;
    }
  }
}
?>
2

Musisz pobierać dane wcześniej zanim użytkownik je zacznie wyszukiwać lub wprowadzić wartwę cache.
A) Odpalasz CRON`y które cały czas aktualizują Twoją bazę danych o dane z API WoT. Twoja aplikacja korzysta wyłącznie z bazy danych, nie łączy się już z API.
B) Jak robisz żądanie do API WoT to zamiast tylko wyświetlać te dane użytkownikowi dodatkowo zapisujesz je w bazie, tak aby kolejny użytkownik nie łączył się już z API tylko skorzystał z zapisanych danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1