在过去的这个周末。接到了一个线上问题,描述如下:手动添加一个员工,然后进入线索管理编辑某个线索归属人,在下拉展示的员工列表当中,看不到我新添加的员工。
立马自己复现了一下,此时看一下接口返回情况,发现拉起员工列表的页面这个操作,并没有调用接口实时请求数据,也就是说这个地方使用的是缓存。
开发给的解释是:出于性能考虑,系统登陆后就缓存了员工这些基本配套信息,不是实时请求。进入设置——应用管理——找到该应用——清除数据,重新登录就看到新员工了。
客服欣然接受了这个处理方法。按照这个方法也解决了问题。
实际上,这个地方就不能从代码层面上优化了吗?方案肯定是有的:
思路一:
查询员工列表的地方,接口改成实时调用,这样每次展示的列表就都是最新的数据
思路二:
按照定时器设置的时间,每到达新一轮时间,就会自动触发同步员工,商品等配置项
思路三:
后台返回的缓存中添加时间戳,每次请求的时候先做数据对比,对比有差异的情况下,后端才会返回新的数据,
前端缓存数据中,需要增加时间戳标记,后端增加记录接口数据最新的变更时间戳updateTime,通过对比终端请求参数中,上一次请求时间戳oldRequestTime 和 updateTime来决定是否要返回数据:
if(oldRequestTime > updateTime) { return null; } else { return data; }
这三种方法中,接口请求次数最频繁的肯定是方案一,其次是二,三,但是三对前端的代码又有一定要求,没有整理好思路或者版本发布节奏一般不会采用三,实际上,我们公司的开发最终采用的也还是简单粗暴的方案一。如果感兴趣的同学可以试试方案三。