背景
在大多数现代 Web 应用程序中,数据通常需要通过网络请求从服务器获取。然而,频繁的网络请求会导致较长的加载时间和较高的带宽消耗,从而影响用户体验。如:我们每次进入首页接口数据加载缓慢,无法快速打开页面,用户体验很差,丢失留存率。
通过在前端实现数据缓存,可以将一些数据存储在客户端,减少对服务器的依赖,加快数据加载速度,降低网络延迟,并减少对用户设备资源的消耗。我们考虑在端上进行数据存储,第二次加载时,会优先返回缓存的内容,然后在背后重新发起请求。
介绍
一套强大的异步数据管理的 Hooks,采用hooks方式处理异步数据。 可以用于缓存任何类型的数据,包括对象、数组和字符串。适合用于缓存用户数据、API 响应和静态资源。也通过插件式组织代码扩展出更高级的功能。
可适配多端:web、H5、miniprogram
目前打造能力:自动请求/手动请求、缓存、轮询、错误重试
为什么需要它?
- 减少网络请求:缓存可以避免重复请求相同数据,降低服务器负担。
- 提升性能:读取缓存数据比从网络获取数据更快,减少页面加载时间,减少对用户设备资源的消耗。
- 改善用户体验:即使在离线情况下,用户也能看到之前加载过的数据。
架构设计
该工具我们利用 Hooks 能力去维护和搭建我们整体的架构,具体如下:
该设计通过获取数据方法、配置和自定义插件触发相关功能。
- 数据方法:通过promise去处理数据方法。
- 配置:触发该方法的配置选项。
- 自定义插件:在请求生命周期过程中自定义处理。
内部提供了会提供很多功能,比如请求周期、自动请求、手动请求、loading状态,也可以提供接口刷新和取消功能。
内置插件,插件内可以提供请求周期所有的状态以便开发业务本身的逻辑。
数据请求周期
该设计提供了以下几个生命周期配置项,供你在异步函数的不同阶段做一些处理。
onBefore:请求之前触发onSuccess:请求成功触发onError:请求失败触发onFinally:请求完成触发
缓存机制
Hooks 提供了一种优雅的方式来管理组件状态和副作用,结合缓存策略,我们可以有效地优化数据请求。下面介绍一下实现数据缓存
流程
该机制一共三个方面:缓存数据、运行流程、输出。
进入流程后,判断是否有新鲜缓存数据key,如果没有进入请求缓存流程,有就会直接输出。
没有配置新鲜缓存数据key,直接判断缓存时间是否过期,过期了直接请求异步数据方法,没过期判断是否有缓存,有直接将数据进行输出,没有请求异步数据。
请求异步数据后,一方面进行存储到缓存中,另一方面将数据进行输出。
多级缓存
该设计可以传入缓存参数,将参数值当作缓存的key进行存储;通过监听里面对象值的变化将对应的key值进行存储。
多类型
缓存可以分为多个类型,主要是客户端缓存和运行缓存。
运行缓存是将当前数据存储在运行环境中,当页面更新时会先调用当前缓存数据, 重新打开应用或者页面,缓存数据会清除。
客户端缓存分为cookie和storage,只要应用和客户端缓存未清除,缓存数据会一直存在。
插件化
该设计内置插件化系统,将生命周期中各个阶段前后变化方法进行输出。
每个插件输出上述生命周期的阶段方法,在里面做自定义处理。
该设计在请求生命周期方法前后,收集插件内所有输出方法,相同生命周期方法根据前后写入进行存储到数组中。在运行当前生命周期的方法时,遍历当前方法。
版本控制
该设计可增加版本设置,该功能可通过版本切换相应数据。
开发者可通过传入版本,通过不同的版本号,将数据根据版本进行存储。这样项目中数据就能根据app版本或者项目版本进行转换。
写在最后
通过自定义 Hooks,我们可以轻松地在应用中实现高效的数据缓存机制。这不仅提升了应用性能,还改善了用户体验。根据具体需求,开发者可以进一步扩展和优化缓存策略。