问答思考:如何设计APP清理缓存功能?
前些天,在天天问里面看到有个关于如何设计“清理缓存”的功能,然后思考了一下的确很多app上都有清理缓存的功能,但是也有少部分app上没有清理缓存的功能,那么问题来了,缓存是什么?有什么价值?又要如何设计清理缓存功能呢?于是乎,就有了今天的这篇文章。
一、什么是缓存?
缓存就是数据交换的缓冲区,当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。简单的理解就是把用户访问的数据存在本地,当用户在某些情况下需要使用时,直接在本地调取缓存的数据,这样效率较高。
二、有哪些app缓存方式?按需缓存,是把从服务器获取的内容以某种格式存放在本地文件系统,之后对于每次请求,检查缓存中是否存在这块数据,只有当数据不存在(或者过期)的情况下才从服务器获取。这样的话,获取数据的效率就明显提高了。预缓存,是把内容放在本地以备将来访问,另外就是在本地缓存无需重新连接服务器时可被编辑。编辑可能是用户进行“标记记录为已读”或“加入收藏”,或其他类似的操作。三、为什么要有缓存?
缓存的目的主要是提高app的性能和离线访问数据,那么对于用户来说有哪些价值?
a场景
用户首次打开资讯类app首页,loading了5秒钟首页资讯信息才全部展现出来,然后点击某一条资讯,浏览该咨询的详细信息,浏览完再返还到首页浏览其他资讯,这时候首页加载多久才能显示出所有资讯信息?如果还是要loading5秒钟的话,那么用户反复的进入下一页和返还首页的过程中,会明显感觉到首页总是在loading,从而消耗了用户时间,也降低了用户体验。
缓存价值:提高app性能和页面加载效率,第一次将页面资讯信息进行缓存到本地,后续在未刷新情况下直接调用本地数据而不是访问服务器数据,来提高数据获取的效率。
b场景
用户在有网络的情况下,使用阅读类app点击查看了一本小说,而后出门在地铁上无聊想看这本小说,但这时候地铁内无信号,如果仅仅因为没有信号的原因,用户打开app映入眼帘的就是带有网络异常的警示页和他无法阅读之前中意的小说的结局吗?
缓存价值:支持离线访问,用户在app离线无网络的情况下,仍可以阅读之前缓存到本地的小说内容,即解决用户离线访问的需求,又提高了离线情况下app的视觉友好度。
c场景
用户在使用社交app时,因为外界因素导致长时间处于无网络的情况下,这时候他想删除某一条聊天记录,或者是收藏一篇美文,亦或者是给好友的动态进行点赞。那结果会是因为app离线的情况下,用户无法进行以上的操作嘛?
缓存价值:支持用户离线操作,对于将之前用户浏览的信息缓存到本地后,用户仍可在离线状态下,对信息进行辅助性操作,比如点赞、收藏、标记等。这样能提高用户的满意度。
d场景
用户使用短视频app查看了一部20m的短视频,花费了20m流量。当用户观看完就关闭app了。那么当用户觉得之前观看的短视频很精彩,想再次观看这部短视频的时候,还需要花费20m流量吗?
缓存价值:减少用户流量损耗,当用户第一次观看短视频时,已经花费一定的流量将其缓存到本地,后续还需要观看此短视频,则无需花费流量来从服务器端获取此短视频,可直接在0流量情况(等同于离线)下直接观看此短视频。
四、如何设计清理缓存功能?
上述主要介绍假设的四种用户场景及对应体现出的缓存价值,可以肯定的是app的缓存功能是有一定的必要性。那么手机缓存只有优点没有缺点嘛?答案显而易见是no。毋容置疑的是app的缓存会一定程度上影响到用户手机的储存空间,所以需要设计一个清理缓存的功能,以便于用户有效的使用被释放的存储空间。那么接下来谈论如何来设计清理缓存功能呢?
是否需要用户清理缓存
1、不需要
不需要用户清理理app缓存的前提是,此app不会占用用户手机过多的存储空间,这时候就不需要用户自己来清理缓存了,可以通过系统自动来清理app缓存。自动清理缓存的两个要素:设置缓存的上限、设置清理缓存的频率。
2、需要
多数常见于im类、电商类、资讯类、阅读类、视频类等app需要单独设置清理缓存的功能,因为这类app会因为用户频繁的使用缓存较多的数据在本地,可能会占用手机较多的储存空间,这类app会把是否清理缓存的权限交由用户自己决定。(另外还有少部分app,用户可自定义设置缓存的上限,这样用户不仅有清理缓存的权限,还有设置缓存上限的权限。比如网易云音乐,用户可勾选缓存的上限值是多少,按理超过的上限的缓存是不被存放到本地来占用手机储存空间的,一旦达到缓存上限时,app是不会进行超过缓存上限的提醒,主要是为了不干扰用户正常操作。)
用户清除缓存的细节
1、显示缓存大小
这是最基本、也是不能忽略的一点就是显示缓存的大小,以便于用户根据缓存大小来判断是否要清理这些缓存。
2、显示当前app缓存占用手机储存空间的比例
显示当前缓存占用手机存储空间的比例,以及可用的手机储存空间有多大,为用户选择是否清理缓存提供了两种方式的比较,提高用户清理缓存的参考度。
3、显示缓存分类
将app缓存进行分类,一般分类有两种维度,一种是时间维度,另外一种是内容维度。
(1)时间维度
主要是可清理某一时间段的手机缓存。比如飞猪显示3天之内、3~7天、7天之外各阶段缓存大小,用户可*选择清理哪一时间段或多个时间段的缓存。这样在用户手机储存空间不足,但又不想清理最近使用app留下的缓存情况下,给用户提供了一个不错的选择。
(2)内容维度
按照缓存内容进行分类显示缓存大小并支持单独清理某一类缓存。比如same缓存分为清除图片缓存、清除语音缓存、清除数据缓存、草稿文件缓存、贴纸图片缓存及各自缓存大小,这样当用户需要在app缓存和手机储存空间之间进行权衡时,可选择对用户损害最小的一类缓存进行清除。这不仅能满足用户释放手机储存空间的需求,又提高了用户体验。
4、清理缓存的交互显示
(1)是否需要清理缓存
当用户点击进行缓存清理时,弹出弹框提示用户是否需要清理,一方面告知用户清理缓存需要一定的时间,减少等到缓存被清理过程中的焦虑感;另外一方面,避免用户手误错点到清理缓存,使得用户能慎重决定。
(2)缓存是否成功清理
当系统清理完缓存时,希望用户能得到缓存是否清理成功的反馈,可以是缓存大小变为0,也可以是一句“缓存清理成功”。
五、总结
最后,至于大家如何设计各自app清理缓存的功能,那就需要大家考虑各自app所属类型,不同类型的app清理缓存的侧重点和复杂度也不同,若是低频率且缓存较小的app可考虑系统自动清理缓存,而不用花费精力设计独立清理缓存的功能供用户操作;另外就是考虑目前产品所属阶段,如果是产品上线初期,应该把精力花在强需求、高频次的功能上,而不是低频率的清理缓存上。
以上种种只是我的个人想法,大家有没有什么更好的想法呢?欢迎来一起思考讨论。