范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

霸榜掘金!轻量级请求策略库alova出炉!

  大家好,很高兴又见面了,我是" 高级前端进阶 ",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
  高级前端进阶前言
  今天在掘金上看到了一篇热文,题目是《是时候该换掉你的 axios 了》。当时眼前一亮,以为又有什么新请求方案出来了,以前也尝试讨论过 xhr、fetch、axios、甚至 Redaxios(体积只有 800 字节),看得出来大家对这一类文章都比较感兴趣,毕竟大多数情况下都需要面对它们。所以这次也一样,决定一探究竟,看看能给大家带来什么干货。
  以下是已发布文章传送门: 《为什么 JS 开发者更喜欢 Axios 而不是 Fetch?》 《Ajax 会被 fetch 取代吗?Axios 怎么办?》 《谁在动 Axios 的奶酪!它叫 Redaxios!》 《为何需要 Axios!Axios 的 5 个热门替代方案!》 《Node 原生支持 fetch!不是浏览器那个 fetch!》
  话不多说,直接开始进入 alova 介绍的正题! 1.什么是 alova?
  alova 是轻量级的请求策略库( 注意策略两个字 ,与其他请求库有差异),它针对不同请求场景分别提供了具有针对性的请求策略,来提升应用可用性、流畅性,降低服务端压力,让应用如智者一般具备卓越的策略思维。
  alova 核心模块提供了各类适配器接口(如:XMLHttpRequest、axios、Taro、Uniapp 等等),中间件机制来保证高扩展能力,从而适用更多的请求场景。 2.为什么需要 alova
  数据请求一直是应用程序必不可少的重要部分,自从 XMLHttpRequest 诞生以来请求方案就层出不穷,客户端的数据交互探索一直聚焦于以下两个方向: 使用更简单 :如$.ajax、axios、react-query,以及 fetch api 等请求工具,编码形式从回调函数、Promise,再到 usehook ,难度越来越小。 数据交互提示友好 :比如:无状态(卡死状态);loading 进度条;骨架屏、占位等
  除了这两个方面外,其实开发者还应该更多的关注应用的流畅性,比如:减少频繁的、重复的请求,内存缓存优化都是可行的方向。 alova 从请求策略入手,一方面通过 Client-Server 数据交互的高效管理提高了应用的流畅性,另一方面还可以降低服务端压力,在此基础上逐渐演变成了 RSM 的请求场景模型(下文会重点论述)。
  alova 的高可扩展能力可以实现不同场景下的请求策略,通过简单编码即可快速上手。 3.alova 优势
  alova 可以在编写少量代码的情况下,开箱即用地提升应用在请求方面的流畅性,同时保证了开发体验。与常见的请求库相比,alova 在体积上也有明显的优势,是 axios 的(11.1/4.3)1/2.6 倍,是 react-query 的 1/3(4.3k/13k)。
  因此,在包体积敏感的场景可以尝试使用 alova。当然,我曾经也介绍过一个更小的请求库,即 Redaxios,它体积只有 800 字节,远小于 alova。
  Redaxios 使用浏览器原生 fetch() 以 800 字节的形式实现了该 API。所有现代主流浏览器都支持它,并且也扩展到了很多前端基建场景,如: Next.js、Create React App 和 Preact CLI 等等
  同时,alova 也提供了丰富的特性,满足 99%的请求场景,alova 具有以下特性: 支持 vue、react、svelte 等框架,Typescript 开箱即用 alova 的 api 与 axios 类似,开箱即用的高性能请求策略,让应用更流畅 体积只有 4kb(axios 的 30%+),同时支持 tree shaking 高灵活性,请求库兼容性高,如 axios、superagent 或 fetch-api 3 种数据缓存模式(如:内存模式、缓存占位模式、恢复模式等),提升请求性能,同时降低服务端压力 高可扩展,可以自定义请求适配器、存储适配器、中间件,以及 states hook,请求共享,避免重复 数据预拉取,用户可以更快看到信息,无需等待,同时支持实时自动状态管理
  alova 的三种缓存模式分别对应于不同的场景,比如下面的内存模式: lovaInstance.GET("/todo/list", {   // ...   localCache: {     // 设置缓存模式为内存模式     mode: "memory",     // 单位为毫秒     // 当设置为`Infinity`,表示数据永不过期,设置为0或负数时表示不缓存     expire: 60 * 10 * 1000,   }, });
  缓存占位模式下,data 将立即被赋值为上次缓存的旧数据,可以判断如果有旧数据则使用它替代 Loading 展示,同时它将发送请求获取最新数据并更新缓存,这样就达到了既快速展示实际数据,又获取了最新的数据。 const todoListGetter = alovaInstance.Get("/todo/list", {   // ...   localCache: {     // 设置缓存模式为持久化占位模式     mode: "placeholder",     // 缓存时间     expire: 60 * 10 * 1000,   }, });
  恢复模式下,服务端缓存数据将持久化,如果过期时间未到即使刷新页面缓存也不会失效,它一般用于一些需要服务端管理,但基本不变的数据。 const todoListGetter = alovaInstance.Get("/todo/list", {   // ...   localCache: {     // 设置缓存模式为持久化模式     mode: "restore",     // 缓存时间     expire: 60 * 10 * 1000,   }, });4.alova 和请求库的关系4.1 什么是 RSM
  alova 的创建初衷是对不同请求场景提出的一个解决方案,它可以更简洁优雅地实现体验更好,性能更好的请求功能,是一个 RSM(Request Scene Model) 实现库。
  而例如:$.ajax、axios 和 fetch-api 等对请求发送和响应接收提供了很好的支持,它们是 RSM 流程中必不可少的一个环节(请求事件环节),alova 仍然需要依靠它们进行请求,因此我们可以将 alova 看作是请求库的一种武装,让请求库变得更加强大。 4.2 RSM 的 4 个阶段请求时机
  在 alova 中提供了 useRequest、useWatcher、useFetcher 三种 use hook 实现请求时机,由它们控制何时应该发出请求,同时将会创建和维护状态化的请求相关数据,如 loading、data、error 等,无需自主维护这些状态。 const App = () => {   const {     // loading是加载状态值,当加载时它的值为true,结束后自动更新为false     // 它的值为普通的boolean值,请求状态变化时内部将自动调用set函数更新它的值     loading,     // 响应数据     data,     // 请求错误对象,请求错误时有值,否则为undefined     error,     // 直接将Method实例传入即可发送请求   } = useRequest(todoListGetter, {     // 请求响应前,data的初始值     initialData: [],   });   // 你可以直接使用 todoList 来渲染 todo 列表   if (loading) {     return Loading...;   } else if (error) {     return {error.message};   } else {     return (       <>                    {todo.title}           {todo.time}                     );   } };请求行为
  描述以怎样的方式处理请求,在 alova 中以 method 对象实现。 const getTodoList = currentPage => {     return alovaInstance.Get("/todo/list", {         // 注意:这边设置了name属性,用于在无法直接指定Method实例时,过滤出需要的Method实例         name: "todoList",         params: {             currentPage,             pageSize: 10         }     }); }; const App = () => {     const {         // fetching属性与loading相同,发送拉取请求时为true,请求结束后为false         fetching,         error,         onSuccess,         onError,         onComplete,         // 调用fetch后才会发送请求拉取数据,可以重复调用fetch多次拉取不同接口的数据         fetch     } = useFetcher();     // 在事件中触发数据拉取     const handleSubmit = () => {         // 假设已完成todo项的修改...         // 开始拉取更新后的数据         // 情况1:当你明确知道拉取todoList第一页数据时,传入一个Method实例         fetch(getTodoList(1));         // 情况2:当你只知道拉取todoList最后一次请求的数据时,通过Method实例匹配器来筛选         fetch({             name: "todoList",             filter: (method, index, ary) => {                 // 返回true来指定需要拉取的Method实例                 return index === ary.length - 1;             }         });     };     return (         {/* 渲染统一的拉取状态 */}         { fetching ? {{ 正在后台拉取数据... }} : null }         {/* ... */}              ); };请求事件
  表示携带请求参数发送请求以获得响应,alova 可以与 axios、fetch、XMLHttpRequest 等任意请求库或原生方案共同协作。
  下面使用 xhrRequestAdapter 作为 alova 的 xhr 请求适配器。 import { createAlova } from "alova"; import { xhrRequestAdapter } from "@alova/adapter-xhr"; const alovaInst = createAlova(   requestAdapter: xhrResponseAdapter(), );
  下面使用 axiosRequestAdapter 作为 alova 的请求适配器。 import { createAlova } from "alova"; import { axiosRequestAdapter } from "@alova/adapter-axios"; const alovaInst = createAlova(   requestAdapter: axiosResponseAdapter(), );
  下面调用 AdapterTaro 适配 taro 将返回请求适配器、存储适配器,以及 ReactHook,因此不需要设置这三个项,使用方法完全一致。 import { createAlova } from "alova"; import AdapterTaro from "@alova/adapter-taro"; const alovaInst = createAlova(   (baseURL: "https://api.alovajs.org"),   ...AdapterTaro() );响应数据管理
  alova 将响应数据状态化,并统一管理,任何位置都可以对响应数据进行操作,并利用 MVVM 库的特性自动更新对应的视图。
  当响应数据结构不能直接满足需求时,可以为 method 实例设置 transformData 钩子函数将响应数据转换成需要的结构,数据转换后将会作为 data 状态的值。 const todoListGetter = alovaInstance.Get("/todo/list", {   params: {     page: 1,   },   // 函数接受未加工的数据和响应头对象,并要求将转换后的数据返回,它将会被赋值给data状态。   // 注意:rawData一般是响应拦截器过滤后的数据,响应拦截器的配置可以参考[设置全局响应拦截器]章节。   transformData(rawData, headers) {     return rawData.list.map((item) => {       return {         ...item,         statusText: item.done ? "已完成" : "进行中",       };     });   }, });5.本文总结
  文章到这里,大家应该都大概了解 alova 了,也明白为什么开头提示大家注意下请求策略库中的 策略 二字了。因为,alova 就不是一个请求库,这点和 xhr、fetch、axios、甚至 Redaxios 都有本质上的差异,前者是后者的进一步包装,相当于完整的、一体化的解决方案,至于底层请求库,则不作强依赖。
  只是这种包装方案不是每个开发者都有述求,也不是所有项目都需要,所以从掘金的评论上看,大家并不怎么看好,认为是又一个轮子。目前 alova 在 github 上只有 100 个 star,为了鼓励下作者,毫不犹豫的支持了一下。值得一提的是,这个请求策略库的作者是国内的开发者,再次点赞一下吧!
  不过,就我个人而言,我还是倾向于使用 Axios、如果包体积很敏感会尝试 Redaxios。不过,行文至此,就当一次对 alova 的宣传吧,毕竟开源不易! 参考资料
  https://alova.js.org/zh-CN/overview/index
  https://github.com/alovajs/alova
  https://alova.js.org/zh-CN/extension/alova-adapter-taro
  https://alova.js.org/
  https://juejin.cn/post/7213923957824979000
  https://www.npmjs.com/package/alova
  https://alova.js.org/zh-CN/get-started/response-cache

中南大学周聪华教授课题组最新进展点击文末阅读原文可获得原文链接httpsonlinelibrary。wiley。comdoi10。1002smtd。202201663有机盐与碘化铅的快速反应往往导致钙钛矿晶粒小,传音Tecno或将在3月中旬在海外发布自拍手机Spark10Pro品玩3月1日讯,据爆料人士ParasGuglani表示,传音计划在三月中旬发布入门级自拍手机Spark10Pro。根据Guglani爆料,Spark10Pro将配备6。78英寸LC多赚10倍!抖音天猫美团鏖战让快递小哥一夜翻身文丨翟更章编辑丨石航千亿邦原创从前置仓发货送到消费者手里,一单能赚36块钱。骑手小陆告诉亿邦动力,10倍的收益变化,让很多快递小哥都萌生了跳槽给天猫抖音美团做同城配送的心思。在此之谁愿意为ChatGPT买单?作者卢爱芳来源科技资本论ChatGPT推出三个月,大家仍玩得乐此不疲。过了那阵新鲜劲后,我想冷静下来审视几个问题ChatGPT对我们究竟有多大用处?究竟谁愿意为它买单?说实话,测试俄罗斯重罚苹果!9。06亿天价罚单苹果向俄罗斯支付9。06亿卢布的反垄断罚款。近日,苹果向俄罗斯支付了高达9。06亿卢布的反垄断罚款,原因是苹果公司涉嫌滥用应用程序市场,这触犯了俄罗斯的法律法规。至于为何苹果会乖乖ChatGPT人工智能还是奇异点?最近,在网上有个很火的话题,大家都在谈论ChatGPT,到底什么是ChatGPT呢?今天我们就来讲一下新一代人工智能这个ChatGPT和那个谷歌去年的一款人工智能拉姆达及其相似。2MWC厂商大秀肌肉,竖向卷轴屏概念机吸睛,零功耗通信技术亮了每年的MWC大会都是各大厂商秀肌肉的重要展会,对普通消费者来说,这也是了解数码圈最新技术产品的好时机。今年也不例外,各大厂商在MWC2023上大显神通,展出了许多令人惊喜的技术产品淘宝赣州商家运营中心开张已在25个城市成立产业带驻地团队环球网科技综合报道3月1日,淘宝赣州产业带商家运营中心正式启动运营。据了解,这是淘宝的第25个产业带运营中心。自2020年在浙江金华成立第一个产业带商家运营中心以来,淘宝已在全国2用两种金融工具提前规划养老生活!听第13届半岛金融理财师专业大赛获奖理财师讲理财经文半岛全媒体记者夏楠兵马未动,粮草先行,在日常投资理财之余,越来越多的投资者将目光放到了更长远的老年生活。提前进行养老规划,能为我们的晚年生活保驾护航。在第13届半岛金融理财师专业乐山帮的资本江湖有资本的地方就有江湖。在刚刚过去的成都乐山商会新春年会上,乐山帮重要成员齐聚一堂,他们举杯畅饮,喝的是资本江湖里的人情世故。巨星集团和邦集团海天股份德胜集团都是四川知名企业,背后掌深耕绿城数十载,硕果累累筑华章大河报豫视频记者梁奇慧在郑州的西四环,坐落着一片泛着金属光泽的大型建筑,在阳光的照耀下,好似镶嵌在地面上的钻石。这就是第十一届全国少数民族传统体育运动会主场馆,也是郑州新晋的城市地
中年男人的魅力,只源于三个特质,你身上有吗?一遇事从容或许是岁月的无情,带来的同等的惠赠或许是阅历的丰富,加持着强大的身心。对中年男人来说,独立思考与分辨是非的能力,使得他们不再轻易惊慌失措!相比于年少轻狂,他们身上多了一丝中年情殇人到中年,生活得一地鸡毛,心力交瘁,哀莫大于心死。不经意间遇到一个丁香一样结着愁怨的伊人,相同的灵魂,相处时互诉衷肠,让人感到好似回到青年时代,怦然心动,翻开那时摘抄下来的一首诗,不负患者信任托付10月16日上午,各科室以多种形式收听收看了习近平总书记所作的报告,和大家一起再次学习,仍很激动!17日,在武汉大学人民医院(湖北省人民医院),该院党委理论学习中心组开展扩大学习,2022。10。22黄金下周走势分析世界上没有什么会比输到身无分文更让人长经验了,等有一天你知道不做某件事就会不亏钱时,你才可以学习该怎样做才会赚钱。你懂了吗?杰西。利弗莫尔回顾一下昨日周五行情走势昨天美盘价格走了一海运费持续下跌,或回归2019年水平,为何有卖家高兴不起来?我在头条搞创作第二期持续下跌的海运费对卖家来说是利好消息吗?从今年上半年以来,全球海运费的价格均出现了持续性的下跌,海运费的下跌还能持续多久?又会给卖家带来什么样的影响?海运费持续亿吨级油气区4!太提气能源是经济发展的基石,在过去的十年里,我国能源自主保障能力显著提升,建成了全球最大的清洁发电体系,能源结构不断优化,有力地保障了国民经济的稳定运行。马翠华现在住在北京门头沟一个居民硅片巨头打响价格战,隆基进入守利润关键期船大,难掉头。意将硅料硅片电池片组件四大环节都握在手中的隆基,曾享受着全行业最高的利润和市值。如今,却面临来自各个环节的同步围剿。隆基三季度业绩,增速掉队了。近日,一批光伏企业陆续先思考,再价值,后金钱最近开始在头条上写写东西,当看到第一笔收益时,那一刻我有点小兴奋,因为这是第一次在自媒体上的收益,虽然是0。02元,但我认为我写的东西产生了价值。我们做成或做好一件事,往往第一时间金钟奖红毯一言难尽,林心如礼服没撑住,陈意涵怪,杨祐宁变好帅第57届金钟奖来到第二天戏剧类的颁奖现场,经过了前一天小S身穿华服,以一票之差输给前男友黄子佼和Lulu之后,不知道还会有什么精彩的画面出现。先来看看星光熠熠的红毯吧!当晚最火的是洗头容易忽略的4件事,很多人都有,难怪发质差发量少每次心情有点糟糕的时候,大家都想换一个发型。换一个发型,换一个心情,换一个颜色,换一种生活态度。经常在长发短发直发卷发间徘徊的你,发质还好吗?发量还多吗?要想随意地在各种好看的发型天猫双11首发!由巴黎世家打造的YEEZYGAP即将预售作为下半年最重要的消费节点,天猫双11将在10月24日晚8点开启预售。由巴黎世家打造的限量合作系列YEEZYGAP,即将在10月24日20点,在GAP天猫官方旗舰店开启全球预售,其