Facebook イベントのリストがあり、各イベントに参加している友達のリストを取得したいと考えています。
この部分は REST サーバーによって実行されます。
/**
* $this->facebook is instance of `BaseFacebook`
* $results contains 2 events
**/
$stime=time();
$fb_eids=array();
foreach($results as $result)
$fb_eids[]=$result['event']->getFacebookID();
$fb_eids=implode(',',$fb_eids);
$fql=array();
$fql['q1'] = "SELECT uid2 FROM friend WHERE uid1 = me()";
$fql['q2'] = <<<SQL
SELECT uid, eid FROM event_member WHERE 1
AND eid IN({$fb_eids})
AND rsvp_status = 'attending'
AND uid IN (SELECT uid2 FROM #q1)
;
SQL;
var_dump($this->facebook->api(array('method'=>'fql.multiquery','queries'=>$fql)));
var_dump(time()-$stime);
その結果、プロセスに5秒かかりました!!
その時間を減らして、もっと速くしたい。
そのプロセスを改善するにはどうすればよいですか?:
- クライアント側を使用して友達情報を取得しますか?
- データベース内の各ユーザーのフレンド リスト (uid) をキャッシュしますか?(フレンド リストにサブスクライブを追加することは可能ですか?)
- 結果を追跡しますか?(最新の結果が必要なため、これは適切なオプションではありません)?
- イベントごとにクエリを実行するように分割します。すでに試しましたが、はるかに時間がかかります