【设计】客户端更新定义数据(Definition)的几个方案

一、问题/需求

场景:

  • 客户端展示来自服务端的数据;
  • 数据项(Item)有很多,并且可能增、减;
  • 每个数据项的定义(Definition)也可能变化
  • 数据(Data)的展示将依据它的定义

分析:

  • 尽管定义可能发生变化,但频度是比较低的,并不需要每次均从服务器端获取。而具体的数据则是变化的,需要每次获取。
  • 当客户端为移动终端(如手机)时,响应时间是个重要指标
  • 减少Definition的获取,将有效提升客户端的响应时间

 

二、方案

有3个方案:
1) 即时(JIT, Just In Time)  更新
每次申请Data时,同时(JIT)传过去Define的LastUpdateTime.
服务端判断有新的,则与数据一起返回。

2) 按需(OnDemand)更新:
每次需要此数据时,判断IsNull。若为空,则申请更新

3) 初始化(Initiation)更新:第一次运行时全部更新
- 建立标志Flag_Initiated = False.
- 若FALSE, 则做个初始化动作,全部更新;完成后设为True

注:2,3均需同时运行【独立更新Definition】功能 -- 后台线程在空闲时取。

 

image

 

三、方案比较
----------------------

  • 文案2 与 方案3 比,其实是一种延迟策略,只取所需。很多场景下,Definition集合很大,用户不会每条路径都走到。方案3(初始化)不仅有大量浪费,而且初次占用时间可能过长,导致用户体验较差。
  • 方案2与3 存在一定的Definition过时风险
  • 方案1的缺点是:2个逻辑混在一起,复杂度提高一点点;同时,大部分情况下是无用功(返回空)。
  • 方案1的优点是:正确性可以很好地保障。

 

另,方案1与2,均可以作合并申请的优化:将Definition的申请与Data的申请,合并到同一个请求中,节约一次网络交互。这可以避免终端响应时间过长,对于移动互联网特别有价值。

四、结语

你会选择哪个?或者有更好的方案,也请建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值