遇到一个典型问题:客户端从Server分页拉取一组数据。如图所示:(iOS图示)
用户点击View1的“查看”,进入View2.客户端在View2,触发从Server拉取数据操作。
【问题】:
由于Server的数据很大,比如有1000条数据。客户端为了【减少数据流量】没有必要一次全部拉下来,客户端采用分页拉取(例如:分5页拉取,每次拉取200人)。参考具体的场景:
● 如果是首次进入View2,没有缓存,则拉取第一页(0-199条),获取后并保存到本地,如果用户继续往上滑动列表到达底部,触发拉取第二页(200—399条)的事件。
● 此时,用户没有兴趣继续往下看了,反而滑动列表到顶部,触发重新获取列表的操作。如果没有版本号控制,那么客户端扔需要重新拉取第一页,这是流量的浪费。
● 那么,加入版本号控制!客户端和Server增加一个版本号version。看似解决了问题。
● 似乎加入版本号更复杂啦:
从无缓存说起,第一页上传version=0,Server必然返回第一页的结果,客户端做缓存;
但是,第一页完成后,需要更新客户端的version为最新么?
1. 更新version,那么获取第二页的时候,Server一看version跟自己一样,不给客户端数据了。
2. 不更新version,等到所有数据完成后再更新version,如果用户拉取第一页后,采取了全量拉取,仍会造成第一页数据流量的浪费。
参考其他App,比如“今日头条”客户端,也是这种模式。是怎么实现的呢?
期待大家帮忙思考!!!
----------------------------------
网友“人中赤兔马中吕布”给了一个解决方案:
版本号的话,可以采取xxx.xxx的形式,最后一个xxx表示页数,前面的版本号可以表示其他的概念
● 更新到第几页客户端版本号就已此页的分页号来标识
● 服务器比较的时候同时比较两个xxx具体的版本号
问题:客户端从服务器分页获取列表,如何保证流量最少,且客户端和Server数据的一致性?
原文:http://blog.csdn.net/hherima/article/details/19163859