2011-10-17 23 views
1

在實現此功能的過程中,希望得到一些建議。將數據存儲在JSON對象中以避免多次調用

當用戶登錄我網站上的這一頁時,我從linkedin(通過API調用)獲得用戶的連接。現在我需要在我的頁面上一次顯示這些連接,以便進一步處理。最初加載第一個10後,我想給用戶一個選項,以加載10個以上的連接(通過按鈕),然後再添加10個等。

我正在考慮以這樣的方式實現這一點,即當用戶到達頁面上,我進行API調用,一次獲得所有連接,將它們全部存儲到JSON對象中,然後顯示前10個。如果用戶要求下一個10,那麼我從JSON對象讀取下10個。

這是我能達到這種分頁能力的最佳方式嗎?使用JSON對象是一個很好的解決方法嗎?請注意,這裏的想法是阻止製作多個API調用,因爲Linkedin有每日限制。謝謝。

回答

0

我喜歡這種方法,尤其是對於像Autocomplete這樣的情況,每次用戶進行擊鍵時都會有一個服務器端請求。我注意到它給我的服務器帶來了很大的壓力(因爲幾乎全天候都會在應用中使用自動完成功能)。所以我會用我的代碼中的一個例子來適應。這是爲了進入播放列表。

我在PlaylistEntriesController一個動作叫playlist其中JS迴應:

def playlist 
    @all_playlist_entries = PlaylistEntry.scoped # just a dump of all the playlist entries for autocomplete 
    end 
playlist.js.erb

然後:

<% cache 'playlist_entries', :expires_in => '1.day' do %> 
    var titles = <%=raw @all_playlist_entries.map(&:title).uniq.to_json %> 
    var artists = <%=raw @all_playlist_entries.map(&:artist).uniq.to_json %> 
    var albums = <%=raw @all_playlist_entries.map(&:album).uniq.to_json %> 
    var autocomplete_options = { delay: 100, autoFocus: true, minLength: 3 }; 
<% end %> 

然後我簡單地傳遞這些JavaScript的變量爲 「源」自動完成。它是快速的(測試了100,000個條目,數據庫響應時間大約是4秒,實際的自動完成仍然幾乎立即),甚至更好,它每天只需要一次數據庫調用,因爲它被緩存,而不是千兆。當然,不利的一面是,直到第二天才會有新的參賽作品,但在我看來這並不是什麼大問題。

所以這不完全如何實現它,但它會工作。您可以對LinkedIn API進行一次調用,並將結果作爲json對象存儲在javascript數組中(使用to_json,如果需要,您可以在模型中覆蓋該對象)。然後有一個鏈接,說Show 10 more,這將做一些jQuery的魔術,以顯示未來十(我不能做我的頭頂,但它將是一個問題,找出有多少顯示,無論是與JavaScript在每個DIV上將該數字作爲data-attributeid進行變量或存儲,然後獲取數組中的下10個)。

+0

磚頭,謝謝!會嘗試你的建議,並很快回來。 – absolutskyy

相關問題