您使用什么策略来获取和缓存分页集合,特别是在角度或重绘中?

时间:2014-03-04 20:23:19

标签: angularjs api rest caching restangular

假设一个应用程序使用暴露分页集合的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 个答案:

答案 0 :(得分:1)

我做/做的是使用angular $cacheFactory并为每个API端点设置一个条目。因此,如果您当前的网址为/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);

可能比现实生活中的情况简单得多,但你明白了。