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()

Другие вопросы по тегам