庖丁解牛:缓存的使用

庖丁解牛:缓存的使用
上周推出了「庖丁解牛」系列的第一期,在反馈和留言中也看得出大家对这个系列还是比较认同的。今天,果果我就再接再厉,放出第二弹。

第一期的内容,简单介绍了「网易新闻」客户端(Android)第一屏的UI结构,这一期,咱们还是继续分析「网易新闻」客户端,说说UI背后数据缓存的那些事儿。

当你间隔很久后再次打开网易客户端的时候,会看到下面这种现象。

这个过程可以很明显的看到一共有两次内容的加载:第一次是一个「全屏」的loading动画,第二次是一个「自动」的「下拉刷新」操作,这两次操作分别对应两次的数据加载,下面我们来具体分析一下,这两次数据加载的过程。

全屏的「loading」:

当我们非首次打开「网易新闻」时,「头条」栏目下总是可以在一个简短的「loading」动画后加载出内容,甚至在断网的情况下也是如此,这就说明了这次「loading」的内容并非来自网络,而是从本地「loading」的数据。广义上讲,这种将服务器下发的数据存储到终端的行为叫做「缓存」。像list中的「新闻简介」这种结构化的数据,常会选择使用数据库来缓存,这样数据管理起来会非常方便(昨天大家应该已经学习过sql了吧)。一些非结构化的没有强管理需求的数据则会选择直接保存为普通文件的方式,比如一条新闻的具体内容。本地缓存的加载时间正常情况下是非常短的,一般在几十毫秒到几百毫秒之间。但是为了保证UI的流畅性,这个过程会被设计成「异步」(多线程)的,也就是说在UI界面做「loading」动画的同时,还有一个线程在同时从本地加载数据,当数据加载完毕后,再将内容加载到屏幕上。

「自动」的「下拉刷新」:

这次「刷新」出来的数据就是从服务器「拉」回来的了。当距上次刷新超过30分钟,下次打开客户端就会自动触发这个刷新动作,但如果我们在启动客户端之前,将网络断开,就不会触发。这个过程会做三件事情:1、将服务器的数据拉取到本地;2、将新数据对应的内容更新到UI上;3、将新拉取的数据加入缓存(数据库)中。从服务器拉取数据的耗时相比读取本地数据而言,一般会相差一个数量级甚至更多,在极端的情况下还有可能出现拉取失败的情况。

对比这两个过程,可以得出结论:如果需要加快首屏内容的显示速度,我们可以采用优先展示「本地缓存」,然后拉取网络数据的策略,因为读取「本地缓存」的速度相比拉取网络数据来说要快得多。另外,用户向下滑动新闻列表时,已经缓存了的数据就可以直接展示出来,不用再向服务器发送请求,降低了服务器的压力,同时还节省了用户的流量

不过话说回来,网易的这个策略还没有运用到极致,每次启动时闪屏的展示时间完全可以把缓存加载好了,没必要再给个全屏laoding,你说是不是?

来源:给产品经理讲技术,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/96898

发表评论

电子邮件地址不会被公开。 必填项已用*标注

侵权联系
分享本页
返回顶部