0

専用サーバーを使用しています。1gbpsポート。

次のコードがあります(Facebookに接続します)

    if($_POST['friend_id'] != 0) {
        $query = "SELECT uid, first_name, pic, sex FROM user WHERE uid = ".$_POST['friend_id'];
    }
    else {
        $query = "SELECT uid, first_name, pic, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me() order by rand() limit 1)";
    }

    $query = urlencode($query);
    $fql_query_url = 'https://graph.facebook.com/'. 'fql?q='.$query. '&access_token=' . $access_token;
    $response = $facebook->api("/fql?q=$query");
    $data = $response['data'];

次に、uidを使用してユーザーの写真を取得します。

    $img = file_get_contents('https://graph.facebook.com/'.$friend_id.'/picture?type=normal');
    $imagesurse1 = $friend_id.uniqid().'.jpg';
    file_put_contents($imagesurse1, $img);

    $img = file_get_contents('https://graph.facebook.com/'.$user_id.'/picture?type=normal');
    $imagesurse2 = $user_id.uniqid().'.jpg';
    file_put_contents($imagesurse2, $img);

これらのコードは10秒からxx秒かかります。xxは最大60に達しました。何が問題である可能性があります。

サイトアプリです。サイトに「https」がありません

4

3 に答える 3

1

Facebookは通常かなり遅いです。結果をキャッシュできませんか?コードを1つずつテストして、問題の原因となっている部分を特定できますか?

于 2012-08-14T09:21:01.263 に答える
1

一般的に、FacebookのAPIはちょっと遅いと言えます。あなたはあなたのページと何が最も時間がかかるかをベンチマークするべきです。しかし、それはFacebookAPI呼び出しだと思います。

あなたは本当にすべての写真をダウンロードする必要がありますか?OpenGraph-URL(https://graph.facebook.com/'.$user_id.'/picture?type=normal)をHTML画像タグとして使用することはできませんか?

この呼び出しをAJAXと非同期にする可能性はありますか?

于 2012-08-14T09:29:46.940 に答える
0

最初から始めましょう:問題のデバッグ。Facebook APIが遅い可能性があります。これにより、スクリプトはすべてのリソースが読み込まれるまで待機しますが、それらの結果はキャッシュできます。もう1つの問題は、クエリに時間がかかりすぎることです。XDebugでベンチマークを試して、スクリプトの遅い部分が何であるかを確認し、クエリに正しいインデックスがあるかどうかを確認してください。たとえば、2番目のクエリは、join代わりにサブクエリを使用して最適化できる可能性があります。

于 2012-08-14T09:31:28.670 に答える