客户端(一个AngularJS应用程序)从服务器获取相当大的列表。这些列表可能有数百或数千个元素,未经压缩可能会达到几兆字节(某些用户(管理员)获取更多数据)。
我不打算让客户端获取部分结果,因为排序和过滤不应该影响服务器。
压缩效果很好(约为10倍),由于列表不经常更改,“304 NOT MODIFIED”也非常有帮助。但是,缺少另一个重要的优化:
由于列表的典型更改相当小(例如,修改两个元素并添加一个新元素),仅传输更改听起来像是一个好主意。我想知道如何正确地做到这一点。
类似于“GET”“/offer/123/items”的请求应始终返回提供编号123中的所有项目,对吗?可以在此处使用压缩和304,但不能进行增量更新。像“GET”“/offer/123/items?since=1495765733”这样的请求似乎是正确的方式,但是浏览器缓存不会被使用:
- 要么没有任何更改,答案为空(并且缓存它毫无意义) - 要么发生了一些更改,客户端更新其状态,并且永远不再询问自1495765733以来的更改(并且缓存它甚至更没有意义)
显然,当使用“since”查询时,“资源”将不会被缓存(原始查询只使用一次或根本不使用)。
因此,我不能依赖浏览器缓存,我只能使用localStorage或sessionStorage,它们具有一些缺点:
- 它受到几兆字节的限制(浏览器HTTP缓存可能更大且自动处理) - 当达到限制时,我必须实现某些替换策略 - 浏览器缓存存储已经压缩的数据,而我无法获取它们(我必须重新压缩它们) - 对于获取更大列表的用户(管理员),它无法工作,因为即使单个列表可能已超过限制 - 它在注销时被清空(客户的要求)
鉴于存在HTML 5和HTTP 2.0,这非常不令人满意。我错过了什么?
是否可以在增量更新的同时使用浏览器HTTP缓存?
我不打算让客户端获取部分结果,因为排序和过滤不应该影响服务器。
压缩效果很好(约为10倍),由于列表不经常更改,“304 NOT MODIFIED”也非常有帮助。但是,缺少另一个重要的优化:
由于列表的典型更改相当小(例如,修改两个元素并添加一个新元素),仅传输更改听起来像是一个好主意。我想知道如何正确地做到这一点。
类似于“GET”“/offer/123/items”的请求应始终返回提供编号123中的所有项目,对吗?可以在此处使用压缩和304,但不能进行增量更新。像“GET”“/offer/123/items?since=1495765733”这样的请求似乎是正确的方式,但是浏览器缓存不会被使用:
- 要么没有任何更改,答案为空(并且缓存它毫无意义) - 要么发生了一些更改,客户端更新其状态,并且永远不再询问自1495765733以来的更改(并且缓存它甚至更没有意义)
显然,当使用“since”查询时,“资源”将不会被缓存(原始查询只使用一次或根本不使用)。
因此,我不能依赖浏览器缓存,我只能使用localStorage或sessionStorage,它们具有一些缺点:
- 它受到几兆字节的限制(浏览器HTTP缓存可能更大且自动处理) - 当达到限制时,我必须实现某些替换策略 - 浏览器缓存存储已经压缩的数据,而我无法获取它们(我必须重新压缩它们) - 对于获取更大列表的用户(管理员),它无法工作,因为即使单个列表可能已超过限制 - 它在注销时被清空(客户的要求)
鉴于存在HTML 5和HTTP 2.0,这非常不令人满意。我错过了什么?
是否可以在增量更新的同时使用浏览器HTTP缓存?