MySQL + FQL-запросы делают мою страницу очень медленной.Как улучшить производительность? - PullRequest
2 голосов
/ 26 марта 2012

У меня есть много фан-страниц, которые я администрирую в Facebook, и я написал небольшой сценарий, чтобы показать, сколько у них фанатов. Я сохранил нужные страницы (page_name + page_id) в базе данных mySQL.
Сценарий выполняет FQL-запрос и выводит количество поклонников на каждой странице.
Проблема в том, что когда я добавил FQL-запрос, страница стала медленно работать. Я полагаю, что если я добавлю другие FQL-запросы, загрузка станет очень медленной.

Мой вопрос: какие методы нужно использовать, чтобы моя страница загружалась как можно быстрее?
Я думал о том, чтобы фанаты и другие данные были сохранены в БД. Но это значит, что у меня не будет номеров в реальном времени.

Спасибо.

$my_pages = mysql_query("SELECT page_name, page_id FROM pages WHERE user = '".$my_id."' ");

while($page_name = mysql_fetch_assoc($my_pages)) { 
    $fan_count = $facebook->api("/fql", array("q" => "SELECT fan_count FROM page WHERE page_id = '".$page_name['page_id']."'"));
      echo $page_name['page_name'].'-'.$fan_count['data'][0]['fan_count'], '<br />';

}

1 Ответ

1 голос
/ 26 марта 2012

Гораздо лучше получить идентификаторы всех страниц из БД, затем выполнить один вызов Graph API и просто выполнить итерацию результатов.

$my_pages = mysql_query("SELECT page_name, page_id FROM pages WHERE user = '{$my_id}';");

$pages = array();
while($page = mysql_fetch_assoc($my_pages)) {
  $pages[] = $page['page_id'];
}
$pagesIds = implode(',', $pages);
$pagesFanCounts = $facebook->api("/fql", array(
  "q" => "SELECT page_id, name, fan_count FROM page WHERE page_id IN ({$pagesIds})"
));

foreach ($pagesFanCounts['data'] as $page){
  echo "{$page['name']} - {$page['fan_count']}", '<br />';
}

Кстати, никогда, но никогда не выполняйте вызовы внешних служб, таких какэто в цикле с неизвестным числом итераций и, конечно, не при открытом соединении с БД (это может замедлить не только однопользовательский результат, но может повлиять на других посетителей / пользователей приложения)!

PS
Вы можете прочитать некоторые материалы о производительности FQL из удаленных и устаревших (материал FQL все еще концептуально корректен) Руководство по производительности (web.archive.org)

...