现在软件交给网络处理的部分越来越多,用户越来越多,面对的网络条件也就各种各样。虽然现在5G都快来了,但是比如在地铁上、郊区,不知道用户的使用场景是怎么样,所以缓存可以提高App的响应,提高用户的体验。
缓存的使用情况基本分为以下几种:
- 只从网络获取数据,且数据不会缓存在本地,这是默认的缓存策略。(保证了数据是最新的,获取失败就不显示内容)
- 只从缓存读数据,如果缓存没有数据或者缓存过期,返回一个空数组。(单纯的使用缓存数据,获取失败就不显示内容)
- 只从网络获取数据,同时会在本地缓存数据。 (保证当前使用的数据是最新的,保存缓存供其他地方使用)
- 先从缓存读取数据,如果没有或者缓存过期再从网络获取。(常用的缓存使用,首次使用的缓存数据,数据不是最新的。后续刷新才是最新数据)
- 先从网络获取数据,如果没有,此处的没有可以理解为访问网络失败,再从缓存读取。(保存当前使用的数据是最新的数据,获取失败再去读取缓存填充数据)
- 先从缓存读取数据,无论结果如何都会再次从网络获取数据,在这种情况下,Block将产生两次调用。(通常这种做法是先快速从缓存读取数据显示在界面,然后在后台连接网络获取最新数据,取到后再更新界面。)
设置缓存有效性策略去判断是否使用已保存的缓存的几个思路:
- 在应用中,可以根据上次缓存的时间去判断,比如不经常变的商品列表、用户信息等,可以设置一小时的有效期,对于不同更新频率的数据可以采取更短或者更长的缓存时长。
- 也可以在某个接口不使用缓存数据,而根据这个接口去请求服务器最新信息,让服务器告诉你是否需要更新缓存了,当然这种虽然更灵活,但是也很麻烦,处理不好效果可能更差
- 可以根据自己的需求强制去更新缓存操作,比如下拉刷新时去强制更新缓存数据,用户操作更新最新数据去强制让缓存过期等
1、不使用缓存的情况
在网络请求较少的情况下,基本不需要缓存,就是请求服务器获得数据,然后更新视图。所以流程是下面这样的:
2、有缓存的时候只读取缓存,没缓存的时候去更新缓存
这种是最常用的请求方式,当有缓存的时候,判断缓存是否是否有效去进行下一步操作。
因为缓存在有效期内数据都是一样的,所以如果是服务器控制弹窗,比如新手红包的话,使用缓存可能会造成弹窗重复弹出,所以需要针对不同请求做对应的处理
存在缓存且缓存有效的情况流程如下:
缓存不存在或者缓存过期的情况流程如下:
- 先发起请求,判断是否存在缓存
- 不存在缓存或者缓存过期,去请求服务器最新信息
- 请求到最新数据去更新本地缓存和刷新数据,同时将缓存有效期更新
3、有缓存就先读取缓存,然后再去更新最新的请求
这个和第二种情况的区别就是第二种先判断缓存是否在有效期内,不在有效期内才去更新请求。
而这个情况先读取缓存是为了填充数据,例如用户打开软件首页,先去显示数据再去更新最新数据
流程如下:
- 发起请求,如果有缓存先使用缓存更新一次页面
- 请求服务器最新信息
- 请求到最新数据去更新本地缓存和刷新数据,同时将缓存有效期更新
4、单纯的读取缓存
这个就是多了一个数据源而已,如果有缓存就读取缓存,没有缓存就不操作。
总之增加缓存模块的目的是要提高用户体验交互的,所以缓存的目的在于:
- 效率,缓存的目的是为了提高性能,不要因为缓存的原因反而降低了性能;因为缓存其实就是将数据暂时存在内存或者硬盘里,所以有了读写操作,对于频繁更新的数据可以不使用缓存。
- 数据实时性,对于数据缓存的实时性,各种缓存的手机都有自己的策略,如通过设置过期时间、定时刷新等操作。
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/965.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
5 条评论
非要搞得跟windows一样吗。
这个怎么讲?OωO
不管是软件还是网页,我很少使用缓存
软件首页可以做个缓存,防止断网或者网络太差的情况下白屏了
人是能思想的苇草,思想形成人的伟大。