私は、ユーザーが自分のFacebookプロファイルと、その友人(アプリを承認している)のデータからデータを検索できるようにするWebアプリを作成しています。最初は友達をループして、友達のデータを取得するために個別のAPI呼び出しを行っていましたが、それは非常に低速でした。そこで、APIリクエストの配列を作成し、1つのバッチリクエストを送信するように切り替えました。
バッチリクエストは私の問題の解決策になるはずですが、それでも苦痛を伴うほど遅いです。ページの読み込みに約15秒かかりますが、その理由がわかりません。ドキュメントには、バッチ内の各リクエストが並行して処理されると記載されていますが、そのようには見えません。バッチ処理された各リクエストが一意のアクセストークンを取得することは適切ですか?ドキュメントはこれが問題であることを示していませんが、ドキュメントは多くのことを述べていません...
これが私のバッチクエリの1つの例です:
[
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"}
]
コンテキストを提供するために、アプリはユーザーの友達を取得するために1つのAPIリクエストを作成します。次に、それらの結果をループし、(アプリを承認した)各フレンドのバッチリクエストを作成し、PHP SDKを使用して2番目のAPIバッチリクエストを送信します($ json_batchは上記のようなバッチリクエストです)。
$rawdata = $facebook->api('?batch='.$json_batch, 'POST');
(上記の例)。累積結果は、ユーザーの検索クエリとの一致がチェックされ、ユーザーにエコーバックされます。これが発生するのに20秒かかる理由はありますか?
更新: スクリプトの実行中のさまざまな時点で時間を追跡するためのコードを追加しました...クラス全体が11〜13秒で実行されます。(グラフへの)最初のFBapi呼び出しには0.6秒かかります。2番目のバッチ呼び出しは10〜11秒です。しかし、なぜ?