0

人々は私のウェブサイトの速度について、それが遅いと不平を言い始めています。問題を特定するためにあなたの助けが必要です。私はより良い解決策を求めて狂ったようにインターネットを検索してきましたが、成功しませんでした。justin.tv/twitchからstreamnameとストリーマーの訪問者数を取得しようとしています。

現在、私は独自のAPIwikiページから開始コードを使用しています。ただし、非常に遅いです。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 />";
}
?>

アップデート。はい、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>";
4

1 に答える 1

0

おそらく問題は、api.justin.tv からのデータのポーリングにかなりの時間がかかることです (残りのコードと比較して)。http 接続には時間がかかります。データがプルされている間、表示できるものは何もないため、ユーザーは長い待ち時間を経験します。

いくつかの解決策があります。ユーザーが Web サイトを開くたびに API 情報をロードするのではなく、定期的にロードする必要があります。5 分ごとにデータをダウンロードするか、cron ジョブを使用してバックグラウンドで数分または数秒 (値の変化の速さによる) ごとにプルし、データベース テーブルにデータを保存することができます。

データがサーバーに保存されている場合 (低速のファイル システムであっても)、はるかに高速になります。

于 2012-10-24T19:59:17.093 に答える