先总结一句:凭直观感觉,在一定程度上alova
减轻了服务端的压力,但增加前端的工程的复杂度、调试难度,甚至可能增加出 BUG 的频次。
alova
是什么轻量级的请求策略库,它针对不同请求场景分别提供了具有针对性的请求策略,来提升应用可用性、流畅性,降低服务端压力,让应用如智者一般具备卓越的策略思维。
alova
支持的请求策略alova
是核心库,它提供了缓存策略、请求共享策略,以及状态管理等通用功能,能满足 90%+的请求需求。而将具体的请求策略方案放在了@alova/scene-vue
、@alova/scene-react
、@alova/scene-svelte
中,它们是依赖 alova 的扩展功能开发的,目前提供了以下两个主要的请求策略。
alova
对 UI 框架的支持目前支持 vue、react 和 react-native、svelte,同时也支持 Uniapp、Taro
alova
的特性在 vue 中使用 alova 发送一个请求。
import { createAlova } from "alova";
import GlobalFetch from "alova/GlobalFetch";
import VueHook from "alova/vue";
const alovaInstance = createAlova({
baseURL: "https://api.alovajs.org",
timeout: 5000,
statesHook: VueHook,
requestAdapter: GlobalFetch(),
beforeRequest(method) {
method.config.headers.token = "token";
},
responded(response, method){}
});
常规请求库一般都会有这个参数,默认请求的前缀。
它用于确定在 use hook(例如 useRequest)应该如何返回状态化数据,statesHook 将会帮我们创建不同 UI 框架的请求相关的、可以被 Alova 管理的状态,包括请求状态 loading、响应数据 data、请求错误对象 error 等。
请求适配器,请求适配器将用于所有请求的发送,请求发送模块和具体的请求信息是解耦的。
示例中使用的GlobalFetch
, 查看它的源码,它实际上就是对fetch
的一层封装。所以说本质上alova
不是一个请求库,而是一个策略库,它对不同的场景使用不同的策略,在处理前端工作时,性能更优。
// GlobalFetch源码
/**
* alova 2.4.1 (https://alova.js.org)
* Document https://alova.js.org
* Copyright 2023 JOU-amjs. All Rights Reserved
* Licensed under MIT (https://httpshub.com/alovajs/alova/blob/main/LICENSE)
*/
function GlobalFetch() {
return function (elements, method) {
// ...
const fetchPromise = fetch(elements.url, {
...adapterConfig,
method: elements.type,
signal: ctrl.signal,
body: isBodyData(data) ? data : JSONStringify(data),
});
return {
response: () => {
/** **/
},
// headers函数内的then需捕获异常,否则会导致内部无法获取到正确的错误对象
headers: () => {
/** **/
},
// 因nodeFetch库限制,这块代码无法进行单元测试,但已在浏览器中通过测试
/* c8 ignore start */
onDownload: (cb) => {
/** **/
},
/* c8 ignore start */
abort: () => {
/** **/
},
};
};
}
针对request
、response
的拦截器。处理模式与axios
类似。
支持 GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH
hook | 特性 |
---|---|
useRequest | 返回响应式数据 |
useWatcher | 当数据发生变化时,主动发送一次请求;初始化时,默认立即发送一次请求,可以通过配置文件取消默认行为 |
useFetcher | 预拉取一次数据,缓存下次即将使用的数据 |
缓存模式:
alova
在业务层上做了缓存处理,优化了请求的性能问题。缓存策略,带来了好处,但随之而来的也有一些弊端:
是一种很好的策略,对同一个请求 URL 进行合并,请求只发送到服务端一次,所有请求公用同一份返回的数据。
优劣势: