首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >贾斯汀·斯洛

贾斯汀·斯洛
EN

Stack Overflow用户
提问于 2012-10-24 19:51:22
回答 1查看 239关注 0票数 0

人们开始抱怨我的网站速度太慢了。我需要你帮忙找出问题所在。我一直在互联网上疯狂地寻找一个更好的解决方案,但没有成功。我正试图从justin.tv/twitch获得流线名称和该流线的访问者数。

目前,我正在使用他们自己的API wiki页面的入门代码。然而,它非常缓慢。我有52个流存储在我的mySQL数据库中,我将其放入一个数组中,然后使用json解析数据。

代码语言:javascript
运行
复制
<?php
$result = mysql_query("SELECT streamname FROM streams") or die(mysql_error());

$ids=array(); 
while($row = mysql_fetch_assoc($result))  
{
    $ids[]=$row["streamname"]; 
}

$stream_list = implode(",", $ids);
$mycurl = curl_init();

curl_setopt ($mycurl, CURLOPT_HEADER, 0);
curl_setopt ($mycurl, CURLOPT_RETURNTRANSFER, 1); 

//Build the URL 
$url = "http://api.justin.tv/api/stream/list.json?channel=" . $stream_list; 
curl_setopt ($mycurl, CURLOPT_URL, $url);

$web_response =  curl_exec($mycurl);
$results = json_decode($web_response); 
foreach($results as $s) 
{   
 echo "<a href='stream.php?watch=" . $s->channel->login . "'>" . $s->channel->login . " " . $s->channel_count . " viewers</a><br />";
}
?>

更新。是的,我使用我的MySQL来设置每个通道的类别类型。我也试过了,而且速度差别也没那么大。所以仍然是json需要时间来加载。下面是我如何使用MySQL

代码语言:javascript
运行
复制
   $result = mysql_query("SELECT streamname FROM streams WHERE race = 'terran' OR race = 'protoss' OR race = 'zerg'") or die(mysql_error());

$ids=array(); 
while($row = mysql_fetch_assoc($result))  
{
    $ids[]=$row["streamname"]; 
}

$stream_list = implode(",", $ids);
$mycurl = curl_init();

curl_setopt ($mycurl, CURLOPT_HEADER, 0);
curl_setopt ($mycurl, CURLOPT_RETURNTRANSFER, 1); 

//Build the URL 
$url = "http://api.justin.tv/api/stream/list.json?channel=" . $stream_list; 
curl_setopt ($mycurl, CURLOPT_URL, $url);

$web_response =  curl_exec($mycurl);
$results = json_decode($web_response); 
echo "<div id=\"tab1\">";
foreach($results as $s) 
{
    // get race
    $sql = mysql_query("SELECT race, streamname, name FROM streams WHERE streamname = '" . $s->channel->login . "'") or die(mysql_error());

    $row = mysql_fetch_array($sql, MYSQL_BOTH);
    $race = $row['race']; // race
    $streamername = $row['name'];

    echo "race: " . $race . " <a href='stream.php?watch=" . $s->channel->login . "'>" . $row['name'] . " " . $s->channel_count . " viewers</a><br />";

}
echo "</div>";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 19:59:17

最有可能的问题是,从api.justin.tv轮询数据需要花费相当长的时间(与代码的其余部分相比)。http连接需要一些时间。当数据被拉出来时,没有任何东西可以显示,所以用户会经历很长的等待时间。

有几种解决办法。用户每次打开网站时,不应加载api信息,而应定期加载api信息。您可以每5分钟下载一次数据,或者每隔几分钟或几秒钟使用cron作业在后台提取数据(取决于值的变化速度),并将数据存储在数据库表中。

如果数据存储在服务器上(即使是在缓慢的文件系统上),则速度会更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13056654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档