2012-04-11 82 views
0

我有一個應用程序必須在一個循環中進行50到100個API調用。爛番茄每秒鐘有10個呼叫的限制。由於這個原因,我的請求在兩者之間失敗,我每次都得到不同的結果。在不超過10個/每秒限制的情況下提出這50個請求的有效方法是什麼?這是我的代碼:每秒有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 2012-04-11 02:52:52

+0

我想顯示電影的名稱以及海報縮略圖和演員信息。基本上我有一個包含100個電影名稱的文本文件。我會閱讀該文件併爲該電影名稱提出請求並取回海報等。其功能是每個用戶都可以從列表中看到他們已經看到的電影。我會將其存儲到數據庫中,並在用戶返回時將其提取。 – Pradep 2012-04-11 02:59:25

+0

通常你會保存動態內容的引用調用,如果你只是存儲一個大列表,那麼爲什麼不把海報鏈接存儲在那裏呢?當用戶想要查看特定電影的「細節」時,調用改變的內容。您正在使用的查詢電話實際上是爲了返回用戶生成的搜索結果(例如:他們使用您搜索「air bud」,並通過一個ajax調用來查看您網站上的所有400個影片電影) – Sinetheta 2012-04-11 03:04:17

回答

0

這取決於你想要做什麼。如果結果是直接(在線)進入你正在渲染的用戶網頁(並且沒有可以做的而不是單獨的批量調用),那麼你可以做的事情很少(你至少需要5秒鐘呈現該頁面)。

如果您經常重複使用相同的內容,那麼如果服務提供商的條款允許將短時間內的呼叫結果緩存起來以避免必須一次又一次地接通所有呼叫。

同意上面的觀點 - 如果您直接渲染到多個用戶的網頁,您將遭受嚴重損失 - 最好考慮一個簡短的緩存策略。

+0

好的。我是jQuery的新手,並使用API​​。你能詳細說明如何緩存我從網站獲得的數據嗎?這對我很有幫助。 – Pradep 2012-04-11 05:29:21

+1

要緩存,您需要從服務器端應用程序實際調用API,並將其保存在memcached或您的數據庫中。然後,您可以將項目從本地存儲拉到您的服務器端渲染頁面。這是使用javascript調用直接訪問的API的替代方法(無需通過服務器) - 希望有所幫助。 – steve 2012-04-13 05:52:40