2010-12-06 21 views
1

私はAPI呼び出しを頻繁に行うWebアプリケーションを作っています。すべてのAPIコールは単純なGETリクエストですが、ロード時間と出力リターンタイムをできるだけ速くしたいと考えています。今の時点で、私は次のように使用してAPI呼び出しを行うためのcURLを使用しています:速度のためにcURLを最適化する

<?php 
function api_call($params) 
    { 
    $base = 'https://api.example.com/Api?'; 
    $url = $base . http_build_query($params); 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    return json_decode($output,true); 
    } 
?> 

私はより速く、ダウンロード、および/または出力時間のためにこれを最適化することができます任意の方法はありますか?

答えて

-1

リクエストが同じサーバーに接続されている場合は、キープアライブ接続を使用してください。

+0

はい、同じサーバーへの呼び出しですが、出力の異なるパラメータと異なる戻り値のみが出力されます。キープアライブはそれにはいいのだろうか?もしそうなら、どうすればAPIサーバーと私の間の接続をcURLでもっと長く生き続けることができますか? – lolmoney

+4

-1 php curlは自動的にキープアライブを使用します。 http://stackoverflow.com/questions/972925/persistent-keepalive-http-with-the-php-curl-library –

+0

@Whitlock真剣にあなたはdownvoting人々のキックを得るのですか?私は本当にこれが悪い答えだとは思わない。たぶん彼はよく分からなかったでしょう。私はタイラーがlolmoneyを助けようとしていると思いますか? – Alfred

4

コードの速度は実際にそこでは非常に最適化することはできません。ボトルネックはサーバーとサーバーの間の接続になります。コード内でそれをスピードアップするためにできることはあまりありません。

-1

複数のスクリプトを起動するためにマルチスレッドを使用することができます。あなたの要求をより速く実行することができます

+2

-1これは、一度に複数のURLを取得する場合にのみ機能します。 –

6

多くのAPIコールでデータが同じである場合は、キャッシュを使用する方法はありますか?コードの問題よりも接続速度の問題が多い。

+0

+1キャッシュはここでは良い戦略です。それは間違いなく、アプリケーションの速度を高める可能性があります。 –

7

ホスト名api.example.comではなくIPアドレスを使用できますか?はいの場合は、namelookup_delay(私の場合は数百ミリ秒)をスピードアップすることができます。

キープアライブはキープアライブがリクエスト間の接続をプールしないため、キープアライブは役に立ちません。これは古典的なウェブブラウザ - ウェブサーバのシナリオで有用です。

+2

Downvote?理由? – mixdev

0

は最適化:

<?php 
    function api_call($params) 
    { 
     $url='https://api.example.com/Api?'.http_build_query($params); 
     return json_decode(file_get_contents($url),true); 
    } 
?> 

をまたすることができます:

  1. $url変数を削除し、file_get_contents()内の文字列を貼り付けます。
  2. $paramsが変更されていない場合は、http_build_query();を削除してその結果を変数に1回保存することもできます。
2

あなたができることはもう1つです。 転送するデータが少なくて済むようにエンコードを有効にします。

curl_setopt($ch, CURLOPT_ENCODING, '');//set gzip, deflate or keep empty for server to detect and set supported encoding. 

エンコードを有効にすると、データは送信される前に圧縮されます。 大容量のデータを扱う場合は、処理に時間がかかることがありますが、転送されるデータは非常に少なくなります。

関連する問題