Twitch API замедляет работу сайта
Я использую Drupal и хочу добавить блок, где отображаются потоки пользователей, как они это делают на teamliquid.net.
Поэтому я делаю обычные вещи, добавляя пользователям поле, в котором они могут ввести свой Twitch-ID и так далее.
Так что это мои представления view-fields -streambar- block.tpl.php file:
<?php
$time_pre = microtime(true);
$channelName = strip_tags($fields['field_streamid']->content);
$json_array = json_decode(file_get_contents('https://api.twitch.tv/kraken/streams/'.strtolower($channelName)), true);
$saveResult = " is Offline";
$currentViewer = "Offline";
$game = strip_tags($fields['field_teamuser']->content);
if ($json_array['stream'] != NULL) {
$channelTitle = $json_array['stream']['channel']['display_name'];
$streamTitle = $json_array['stream']['channel']['status'];
$currentGame = $json_array['stream']['channel']['game'];
$currentViewer =$json_array['stream']['viewers']." Viewers";
$saveResult = " is Online";
}
$time_post = microtime(true);
$exec_time = $time_post - $time_pre;
$sec = $exec_time * 1000;
?>
<div class=<?php echo "\"$game streamItem\"" ?> title=<?php echo "\"$currentViewer\"" ?> >
<?php
print $sec;
print $fields['name']->content;
echo "$saveResult";
?>
</div>
Пока это работает, но он тормозит сайт как ад. Это моя вина или API очень медленный и мне нужно искать обходной путь?
1 ответ
Это должно быть медленно, каждый раз, когда пользователь запрашивает вашу страницу, ему приходится ждать, пока ваш сервер затем запрашивает другую страницу с другого сайта, добавляя тонну задержки к каждому запросу страницы. Представьте, что вы получили 200 обращений одновременно, то есть 200 человек ожидают, что ваш сервер 200 раз перейдет к API, запросит одну и ту же информацию 200 раз, получит и обработает одну и ту же информацию 200 раз.
Правильный способ сделать это - использовать API-интерфейс Twitch каждые несколько минут / секунд в зависимости от частоты обновления, которую вы хотите (я бы порекомендовал Ultimate Cron и написал для этого функцию Cron), затем кэшировать эти результаты в таблицу базы данных. При запросе страниц ваш сайт должен получать результаты из базы данных вместо того, чтобы каждый раз посещать API. Это снизит вашу задержку для каждого запроса и даже сэкономит вашему серверу некоторые циклы ЦП.
посмотрите на hook_cron()