2012-04-11 3 views
0

私はループ内で50〜100個のAPI呼び出しを行うアプリケーションを持っています。腐ったトマトは毎秒10通の制限があります。この結果、私の要求は間に失敗し、私は毎回異なる結果を得ます。 10要求/秒の制限を超えないでこれらの50の要求を行う効果的な方法は何ですか?ここに私のコードです:1秒あたり10コール(腐ったトマトAPI)の制限があるときに、一度に50のAPI要求を行う効果的な方法はありますか?

$.each(elem, function (index, item) { 

    var $placeholder = $('<div>').appendTo("div.content"); 

    $.ajax({ 
     type: 'post' , 
     url: moviesSearchUrl + '&q=' + encodeURI(item) + '&page_limit=1', 
     dataType: "jsonp", 
     async: false, 
     success: searchCallback 
    }); 

    function searchCallback(data) { 
     var movies = data.movies; 

     var markup = index + ': '+ movies[0].title + '<img class=" bord" src="' + movies[0].posters.thumbnail + '" /><br/>'; 

     $placeholder.replaceWith(markup); 
    } 
}); 
+0

ユーザーのために何をしたいですか?それでは、私が提供したい機能を何に求めているのか、Webサービスを叩くのを避けることができるかどうかを確認するだけです。 – Sinetheta

+0

ポスターのサムネイルとキャスト情報とともにムービーの名前を表示したい。基本的に私は100の映画の名前を含むテキストファイルがあります。私はファイルを読んでその映画の名前を要求し、ポスターなどを入手します。機能は、各ユーザーが表示されたリストから既に見た映画を選択できることです。私はそれをデータベースに保存し、ユーザーが戻ったときに取り出します。 – Pradep

+0

通常、大きなリストを保存するだけであれば、ダイナミックコンテンツの参照呼び出しを保存しますが、そこにもポスターリンクを保存しないのはなぜですか?ユーザーが特定の映画の「詳細」を見たいときに変更されるものを求めます。あなたが使用しているクエリ呼び出しは、実際にはユーザー生成検索の結果を返すことを意図しています(例えば、あなたは "air bud"を検索して、1つのajax呼び出しであなたのサイトの400個のair budムービーを見ることができます) – Sinetheta

答えて

0

それはあなたがしようとするものによって異なります。あなたがレンダリングしているユーザーのWebページに結果がまっすぐに(行内に)進んでいる場合(個々のものの代わりにできるバルク呼び出しがない場合)、あなたはできることはほとんどありません(最低5秒かかりますそのページをレンダリングする)。

同じコンテンツを頻繁に再利用している場合は、サービスプロバイダーの条件に従えば、短時間の呼び出し結果をキャッシュする価値があるかもしれません。

上記の点に同意してください。複数のユーザーがいるWebページに直接レンダリングする場合、短時間のキャッシュ戦略を考えるのが賢明です。

+0

私はjQueryを初めて使用しており、APIを扱っています。サイトから取得したデータをキャッシュする方法を詳しく説明できますか?それは私にとって大きな助けになるでしょう。 – Pradep

+1

キャッシュするには、サーバー側のアプリケーションから実際にAPIを呼び出し、memcachedやデータベースなどのものに保持する必要があります。次に、ローカルストレージからサーバーサイドレンダリングページに項目を引き出すことができます。これはjavascriptを使用して直接アクセスしているAPIを(サーバーを経由せずに)呼び出す代わりに役立ちます。 – steve

関連する問題