2012-10-24 3 views
0

사람들이 내 웹 사이트 속도에 대해 불평하기 시작합니다. 속도가 느립니다. 문제를 파악하는 데 도움이 필요합니다. 나는 더 나은 해결책을 찾았지만 성공하지 못한 채 미친 듯이 인터넷을 검색했다. 나는 streamname과 justin.tv/twitch에서 유영이 얼마나 많은 방문자를 얻으려고 노력하고있다.json justin slow

현재 자신의 API 위키 페이지에서 시작 코드를 사용하고 있습니다. 그러나 그것은 매우 느립니다. 나는 배열로 넣은 다음 json을 사용하여 데이터를 구문 분석하는 mySQL 데이터베이스에 52 개의 스트림을 저장했습니다.

<?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>"; 
+0

작업을 수행하기 위해 DB에서 모든 레코드를 가져와야하는 경우 DB를 처음으로 필요로하는 것은 무엇입니까? 코드에 데이터 입력 –

+0

코드가 꽤 능률적으로 보입니다. 이미 52 개의 API 호출 대신 쉼표로 구분 된 채널을 사용하여 단 하나의 API 호출 만하고 있습니다. 코드를 프로파일 링하고 느린 부분을보아야합니다. API 호출이 그렇게 할 수 없다면, 가장 좋은 건 API 호출 결과를 캐시하고 CURL 호출에 시간 초과를 설정하는 것입니다. CURL 호출이 길어지고 X 시간이 지나면 시간이 초과되고 캐시 된 결과를 대신 표시 할 수 있습니다. –

+0

감사합니다. 나는 이것을 조사 할 것이다. – mpj

답변

0

대부분의 경우 문제가 사용 방법은 다음이며, api.justin.tv의 데이터가 상당히 오래 걸립니다 그 폴링 (코드 F 나머지 부분에 비해). http 연결에는 약간의 시간이 걸립니다. 데이터를 가져 오는 동안 아무 것도 표시되지 않아 사용자가 긴 대기 시간을 경험합니다.

몇 가지 해결책이 있습니다. 사용자가 웹 사이트를 열 때마다 정기 간행물 정보를로드해서는 안됩니다. 5 분마다 데이터를 다운로드하거나 cron 작업을 사용하여 몇 분 또는 몇 초마다 백그라운드에서 끌어 당길 수 있습니다 (값 변경 속도에 따라 다름). 데이터를 데이터베이스 테이블에 저장하십시오.

데이터가 서버에 저장되는 경우 (느린 파일 시스템에서도) 훨씬 빠릅니다.

+0

안녕하세요 조나스. 나는 어딘가에 cron 작업을 사용하는 것에 대해 짧은 것을 읽고 있었고, 그렇게 진보 된 것처럼 보인다. 어디서부터 시작해야할지, 어디에서 배워야할지 모르겠습니다. 그러나 이것은 제가 얻을 수있는 가장 좋은 대답 일 것입니다, 고마워요. – mpj