2014-03-04 25 views
5

讓我們假設一個應用程序使用暴露分頁集合的REST API中的數據,並且集合中的項目數量可以無限大(即,一次只能提取所有項目並存儲在瀏覽器會話中)。您使用什麼策略來獲取和緩存分頁集合,特別是在角度或緩衝區中?

什麼是獲取,緩存和無效的緩存這些數據的好策略?

說,API是等,

GET /users?page=1&per_page=50 

中包含的響應(即包括收集數據+尋呼元數據)

{ 
    "paging": { 
    "per_page": 20, 
    "page": 1, 
    "previous": null, 
    "self": "/api/v1/users?per_page=20&page=1", 
    "next": "/api/v1/users?per_page=20&page=2" 
    }, 
    "data": [ 
    // first 20 users 
    ] 
} 

客戶機可以或可以不加載集合在連續的頁面中,一次一頁。任何客戶都可以更改集合中的用戶。最終的一致性已經足夠,而且我現在不擔心寫入衝突。

問題是在angularjs應用程序的上下文中,但是是一個通用的場景。

回答

1

我會做/做的是使用angular的$cacheFactory並且每個API端點都有一個條目。所以如果你當前的URL是/api/v1/users?per_page=20&page=1緩存的密鑰將是/api/v1/users沒有任何分頁參數。然後,一旦被返回的響應做在處理數據的功能如下:

// add customer insert method somewhere 
Array.prototype.insert = function (index, item) { 
    this.splice(index, 0, item); 
}; 

var cachedData = $cacheFactory.get(key); 

var insertPosition = pageSize * currentPage; 

cachedData.insert(insertPosition, returnedData); 

$cacheFactory.put(cachedData); 

也許簡單得多,比它必須是在真實的生活場景,但你的想法。

+0

Hi @ just-nik,從緩存集合中獲取單個項目時,你會做什麼?遍歷本地數據並首先查找它?當集合中的任何項目被更新並(並保存回服務器)時,你會做什麼? –

+0

是的,可能。 我只是用所有項目的數量初始化數組。然後,您可以隨時更新單個項目 –