人们开始抱怨我的网站速度,它很慢。我需要你的帮助来确定问题。在更好的解决方案之后,我一直在互联网上搜索,但没有成功。我正在尝试获取流名称和流媒体有多少来自justin.tv/twitch的访问者。
目前我正在使用他们自己的API wiki页面中的入门代码。然而,它非常慢。我在mySQL数据库中存储了52个流,然后将其放入数组中,然后使用json解析数据。
<?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 />";
}
?>
UPDATE。是的我使用MySQL设置每个频道的类别类型。我也试过没有这个,速度差别不大。所以它仍然是需要时间加载的json。这是我如何使用MySQL
$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>";
答案 0 :(得分:0)
问题很可能是,从api.justin.tv轮询数据需要很长时间(与您的代码的其余部分相比)。 http连接需要一些时间。 在拉动数据的同时,没有任何东西可以显示,因此用户会经历漫长的等待时间。
有几种解决方案。每次用户打开网站时都不应加载api信息,而是定期加载。您可以每5分钟下载一次数据,或者使用cron作业每隔几分钟或几秒钟在后台提取数据(取决于值的变化速度)并将数据存储在数据库表中。
如果数据存储在您的服务器上(即使在慢速文件系统上),它也会快得多。