1

我正在使用 Drupal 并想添加一个块,在其中显示用户流,就像他们在 teamliquid.net 上一样。

所以我做正常的事情,向用户添加一个字段,他们可以在其中输入他们的 Twitch-ID 等等。

所以这是我的views-view-fields--streambar--block.tpl.php 文件:

    <?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 非常慢,我必须寻找解决方法?

4

1 回答 1

1

这肯定会很慢,每次用户请求您的页面时,他们都必须等待,而您的服务器然后从另一个站点请求另一个页面,从而为每个页面请求增加了大量的延迟。想象一下,您一次获得 200 次点击,即 200 人在等待您的服务器访问 API 200 次,请求相同的信息 200 次,接收和处理相同的信息 200 次。

这样做的正确方法是每隔几分钟/秒从 Twitch API 中提取一次,具体取决于您想要的更新频率(我建议 Ultimate Cron 并为此编写一个 Cron 函数),然后将这些结果缓存到数据库表中让您的网站在请求页面时从数据库中提取结果,而不必每次都访问 API。这将降低您对每个请求的延迟,甚至为您的服务器节省一些 CPU 周期。

看看hook_cron()

于 2013-09-10T12:56:42.560 回答