curl — Оптимизация кода PHP и сохранение ответа JSON для его более быстрого анализа?

поэтому я пытаюсь выяснить, почему этот PHP-код слишком долго запускается для вывода результатов.

например это мой apitest.php и вот мой код PHP

<?php
function getRankedMatchHistory($summonerId,$serverName,$apiKey){
$k
$d;
$a;
$timeElapsed;
$gameType;
$championName;
$result;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://".$serverName.".api.pvp.net/api/lol/".$serverName."/v2.2/matchhistory/".$summonerId."?api_key=".$apiKey);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
$matchHistory = json_decode($response,true); // Is the Whole JSON Response saved at $matchHistory Now locally as a variable or is it requested everytime $matchHistory is invoked ?
for ($i = 9; $i >= 0; $i--){
$farm1 = $matchHistory["matches"][$i]["participants"]["0"]["stats"]["minionsKilled"];
$farm2 = $matchHistory["matches"][$i]["participants"]["0"]["stats"]["neutralMinionsKilled"];
$farm3 = $matchHistory["matches"][$i]["participants"]["0"]["stats"]["neutralminionsKilledTeamJungle"];
$farm4 = $matchHistory["matches"][$i]["participants"]["0"]["stats"]["neutralminionsKilledEnemyJungle"];
$elapsedTime = $matchHistory["matches"][$i]["matchDuration"];
settype($elapsedTime, "integer");
$elapsedTime = floor($elapsedTime / 60);
$k = $matchHistory["matches"][$i]["participants"]["0"]["stats"]["kills"];
$d = $matchHistory["matches"][$i]["participants"]["0"]["stats"]["deaths"];
$a = $matchHistory["matches"][$i]["participants"]["0"]["stats"]["assists"];
$championIdTmp = $matchHistory["matches"][$i]["participants"]["0"]["championId"];
$championName =  call_user_func('getChampionName', $championIdTmp); // calls another function to resolve championId into championName
$gameType = preg_replace('/[^A-Za-z0-9\-]/', ' ', $matchHistory["matches"][$i]["queueType"]);
$result = (($matchHistory["matches"][$i]["participants"]["0"]["stats"]["winner"]) == "true") ? "Victory" : "Defeat";
echo "<tr>"."<td>".$gameType."</td>"."<td>".$result."</td>"."<td>".$championName."</td>"."<td>".$k."/".$d."/".$a."</td>"."<td>".($farm1+$farm2+$farm3+$farm4)." in ". $elapsedTime. " minutes". "</td>"."</tr>";
}
}
?>

То, что я хотел бы знать, это как сделать вывод страницы быстрее, поскольку это занимает около
10 ~ 15 секунд для вывода результатов, из-за которых браузер думает, что веб-сайт мертв, как внутренняя ошибка 500 или что-то в этом роде.

Вот простая демонстрация того, сколько времени это может занять: Вот

Как вы могли заметить, да, я использую Riot API, который отправляет ответ в виде JSON-кода.

Вот пример ответа, который обрабатывает эта функция: Вот

Я думал о создании временного файла с именем temp.php в начале функции CURL и сохраняя весь ответ там, а затем читая переменные оттуда, чтобы я мог ускорить процесс, и после чтения переменных он удаляет temp.php это было создано, таким образом освобождая место на диске. и увеличивая скорость.

Но я понятия не имею, как это сделать только в PHP.

Кстати, я хотел бы сказать вам, что я только начал использовать PHP сегодня, поэтому я бы предпочел некоторое объяснение с ответами, если это возможно.

Спасибо за ваше драгоценное время.

0

Решение

Попробуйте бенчмаркинг так:

// start the timer
$start_curl = microtime(true);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://".$serverName.".api.pvp.net/api/lol/".$serverName."/v2.2/matchhistory/".$summonerId."?api_key=".$apiKey);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

// debugging
curl_setopt($ch, CURLOPT_VERBOSE, true);

// start another timer
$start = microtime(true);
$response = curl_exec($ch);
echo 'curl_exec() in: '.(microtime(true) - $start).' seconds<br><br>';

// start another timer
$start = microtime(true);
curl_close($ch);
echo 'curl_close() in: '.(microtime(true) - $start).' seconds<br><br>';

// how long did the entire CURL take?
echo 'CURLed in: '.(microtime(true) - $start_curl).' seconds<br><br>';
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]