我正在使用Drupal并希望添加一个Block,其中显示用户流,就像他们在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非常慢,我必须寻找一种解决方法?
答案 0 :(得分:1)
这一定很慢,每当用户请求您的页面时,他们必须等待您的服务器然后从另一个站点请求另一个页面,为每个页面请求添加一吨延迟。想象一下,你有200次点击,200人等待你的服务器去API 200次,请求相同的信息200次,接收和处理相同的信息200次。
这样做的正确方法是每隔几分钟/秒取出Twitch API,具体取决于您想要的更新频率(我建议使用Ultimate Cron并为此编写Cron函数),将这些结果缓存到数据库表然后让您的站点在请求页面时从数据库中提取结果,而不必每次都访问API。这样可以降低每个请求的延迟,甚至可以节省服务器的CPU周期。