纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

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

4月28日 乔了了投稿
  大家好,很高兴又见面了,我是高级前端进阶,由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
  高级前端进阶前言
  今天在掘金上看到了一篇热文,题目是《是时候该换掉你的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、reactquery,以及fetchapi等请求工具,编码形式从回调函数、Promise,再到usehook,难度越来越小。数据交互提示友好:比如:无状态(卡死状态);loading进度条;骨架屏、占位等
  除了这两个方面外,其实开发者还应该更多的关注应用的流畅性,比如:减少频繁的、重复的请求,内存缓存优化都是可行的方向。alova从请求策略入手,一方面通过ClientServer数据交互的高效管理提高了应用的流畅性,另一方面还可以降低服务端压力,在此基础上逐渐演变成了RSM的请求场景模型(下文会重点论述)。
  alova的高可扩展能力可以实现不同场景下的请求策略,通过简单编码即可快速上手。3。alova优势
  alova可以在编写少量代码的情况下,开箱即用地提升应用在请求方面的流畅性,同时保证了开发体验。与常见的请求库相比,alova在体积上也有明显的优势,是axios的(11。14。3)12。6倍,是reactquery的13(4。3k13k)。
  因此,在包体积敏感的场景可以尝试使用alova。当然,我曾经也介绍过一个更小的请求库,即Redaxios,它体积只有800字节,远小于alova。
  Redaxios使用浏览器原生fetch()以800字节的形式实现了该API。所有现代主流浏览器都支持它,并且也扩展到了很多前端基建场景,如:Next。js、CreateReactApp和PreactCLI等等
  同时,alova也提供了丰富的特性,满足99的请求场景,alova具有以下特性:支持vue、react、svelte等框架,Typescript开箱即用alova的api与axios类似,开箱即用的高性能请求策略,让应用更流畅体积只有4kb(axios的30),同时支持treeshaking高灵活性,请求库兼容性高,如axios、superagent或fetchapi3种数据缓存模式(如:内存模式、缓存占位模式、恢复模式等),提升请求性能,同时降低服务端压力高可扩展,可以自定义请求适配器、存储适配器、中间件,以及stateshook,请求共享,避免重复数据预拉取,用户可以更快看到信息,无需等待,同时支持实时自动状态管理
  alova的三种缓存模式分别对应于不同的场景,比如下面的内存模式:lovaInstance。GET(todolist,{。。。localCache:{设置缓存模式为内存模式mode:memory,单位为毫秒当设置为Infinity,表示数据永不过期,设置为0或负数时表示不缓存expire:60101000,},});
  缓存占位模式下,data将立即被赋值为上次缓存的旧数据,可以判断如果有旧数据则使用它替代Loading展示,同时它将发送请求获取最新数据并更新缓存,这样就达到了既快速展示实际数据,又获取了最新的数据。consttodoListGetteralovaInstance。Get(todolist,{。。。localCache:{设置缓存模式为持久化占位模式mode:placeholder,缓存时间expire:60101000,},});
  恢复模式下,服务端缓存数据将持久化,如果过期时间未到即使刷新页面缓存也不会失效,它一般用于一些需要服务端管理,但基本不变的数据。consttodoListGetteralovaInstance。Get(todolist,{。。。localCache:{设置缓存模式为持久化模式mode:restore,缓存时间expire:60101000,},});4。alova和请求库的关系4。1什么是RSM
  alova的创建初衷是对不同请求场景提出的一个解决方案,它可以更简洁优雅地实现体验更好,性能更好的请求功能,是一个RSM(RequestSceneModel)实现库。
  而例如:。ajax、axios和fetchapi等对请求发送和响应接收提供了很好的支持,它们是RSM流程中必不可少的一个环节(请求事件环节),alova仍然需要依靠它们进行请求,因此我们可以将alova看作是请求库的一种武装,让请求库变得更加强大。4。2RSM的4个阶段请求时机
  在alova中提供了useRequest、useWatcher、useFetcher三种usehook实现请求时机,由它们控制何时应该发出请求,同时将会创建和维护状态化的请求相关数据,如loading、data、error等,无需自主维护这些状态。constApp(){const{loading是加载状态值,当加载时它的值为true,结束后自动更新为false它的值为普通的boolean值,请求状态变化时内部将自动调用set函数更新它的值loading,响应数据data,请求错误对象,请求错误时有值,否则为undefinederror,直接将Method实例传入即可发送请求}useRequest(todoListGetter,{请求响应前,data的初始值initialData:〔〕,});你可以直接使用todoList来渲染todo列表if(loading){returnLoading。。。;}elseif(error){return{error。message};}else{return({todo。title}{todo。time});}};请求行为
  描述以怎样的方式处理请求,在alova中以method对象实现。constgetTodoListcurrentPage{returnalovaInstance。Get(todolist,{注意:这边设置了name属性,用于在无法直接指定Method实例时,过滤出需要的Method实例name:todoList,params:{currentPage,pageSize:10}});};constApp(){const{fetching属性与loading相同,发送拉取请求时为true,请求结束后为falsefetching,error,onSuccess,onError,onComplete,调用fetch后才会发送请求拉取数据,可以重复调用fetch多次拉取不同接口的数据fetch}useFetcher();在事件中触发数据拉取consthandleSubmit(){假设已完成todo项的修改。。。开始拉取更新后的数据情况1:当你明确知道拉取todoList第一页数据时,传入一个Method实例fetch(getTodoList(1));情况2:当你只知道拉取todoList最后一次请求的数据时,通过Method实例匹配器来筛选fetch({name:todoList,filter:(method,index,ary){返回true来指定需要拉取的Method实例returnindexary。length1;}});};return({渲染统一的拉取状态}{fetching?{{正在后台拉取数据。。。}}:null}{。。。}buttononClick{handleSubmit}修改todo项button);};请求事件
  表示携带请求参数发送请求以获得响应,alova可以与axios、fetch、XMLHttpRequest等任意请求库或原生方案共同协作。
  下面使用xhrRequestAdapter作为alova的xhr请求适配器。import{createAlova}import{xhrRequestAdapter}constalovaInstcreateAlova(requestAdapter:xhrResponseAdapter(),);
  下面使用axiosRequestAdapter作为alova的请求适配器。import{createAlova}import{axiosRequestAdapter}constalovaInstcreateAlova(requestAdapter:axiosResponseAdapter(),);
  下面调用AdapterTaro适配taro将返回请求适配器、存储适配器,以及ReactHook,因此不需要设置这三个项,使用方法完全一致。import{createAlova}importAdapterTconstalovaInstcreateAlova((baseURL:https:api。alovajs。org),。。。AdapterTaro());响应数据管理
  alova将响应数据状态化,并统一管理,任何位置都可以对响应数据进行操作,并利用MVVM库的特性自动更新对应的视图。
  当响应数据结构不能直接满足需求时,可以为method实例设置transformData钩子函数将响应数据转换成需要的结构,数据转换后将会作为data状态的值。consttodoListGetteralovaInstance。Get(todolist,{params:{page:1,},函数接受未加工的数据和响应头对象,并要求将转换后的数据返回,它将会被赋值给data状态。注意:rawData一般是响应拦截器过滤后的数据,响应拦截器的配置可以参考〔设置全局响应拦截器〕章节。transformData(rawData,headers){returnrawData。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。orgzhCNoverviewindex
  https:github。comalovajsalova
  https:alova。js。orgzhCNextensionalovaadaptertaro
  https:alova。js。org
  https:juejin。cnpost7213923957824979000
  https:www。npmjs。compackagealova
  https:alova。js。orgzhCNgetstartedresponsecache
投诉 评论 转载

给米饭加点料!主食这么吃,营养翻倍,还能吃走小毛病顿顿精米白面并不是什么好事情,虽然它的口感确实不错。现在,学着给米饭加点料吧!米饭里加谷物01大米糙米有助于控制体重糙米是保留了一层谷皮、胚芽和糊粉层的米,富……不玩玻璃了!素皮后壳很高级?老机华为新机vivo小米都在用素皮在2022年旗舰机早已经是见惯不怪的后壳材质了。但很多人对这种材质比较陌生,它的本质是一种人造革,成本比较低廉,但却可以模拟出仿真皮的高级感,所以很多旗舰机都争相用它。从华……北京冬奥会主场华丽亮相,昔日巨无霸炼钢炉变身时尚打卡潮流地北京事儿北京冬奥会沿着长安街一路向西,在北京的最西端,沉寂己久的山水之间,一场翻天覆地的变化悄然发生。过去这里原本是一片煤矿和炼钢厂,如今却高楼林立,路桥飞架,青山……如何使孩子自律2022护苗有我:守护未成年如果一个人没有自律精神,连自己的分内之事都做不好;同时,一个人的自律,不是别人逼出来的,别人逼出来的那叫他律。培养孩子自律的两个结论:一、孩子的自律……又是半决赛对阵广东,辽宁能否重走1718赛季的夺冠之路cba半决赛今日开打,上来就是大家期待已久的辽粤大战,一个很有意思的现象,如果辽宁战胜广东在总决赛面对广厦的话,那就跟1718赛季夺冠时的对手一模一样,当然了,辽宁现在能不能过……原来法式风的精髓,就在于这双扁头鞋!裙子裤子随便搭都高级复古穿搭潮流,来势汹汹。想要在同龄人当中穿出亮眼的法式浪漫风格,不做些功课怎么能行?凡是能和法式风格沾边的单品,都不能逃过我们的火眼金睛。从复古风当中提取出最精髓的法式浪……CBA最有志气的主教练,不拿冠军不下课CBA有一名主教练非常有志气,他就是CBA北京紫金勇士队的主教练马布里。马布里在球员时期是一名实力非常强的球员。马布里为主教练期间,在北京紫金勇士队并没有带出很好的成绩。……天文单位与希腊神话说起距离,在地球上用米,千米基本就够了。可到了天上这些单位都太小了。比如地球到太阳的平均距离是:数字:149,000,000千米中文:一亿四千九百万千米Eng……上午10点!国乒传来好消息刘国梁终极计划已收效,球迷齐声点赞北京时间8月1日上午10点,针对海外乒乓球人的情况,国内媒体《新民晚报》进行了跟踪报道,他们表示海外乒团已经成为是世界乒坛一道独特的风景线,他们都在为乒乓球事业发展作贡献,在国……2分钟看懂战术世界杯上的工业足球,强队都想把左后卫变成边锋卡塔尔世界杯鏖战正酣,球迷却并不满意,开赛以来5场0:0的比分并不是关键原因,更为关键的因素可能是强队们放弃了自己的特色,半数球队踢着雷同的战术。世界杯作为展示国家队足球特点的……3199降至1179!华为nova8SE性价比如何?华为nova8SEHUAWEInova8SE是2020年11月5日发布的一款智能手机,已经超过两年了,价格3199降至1179。那这款手机现在还值得入手吗?1,手机……霸榜掘金!轻量级请求策略库alova出炉!大家好,很高兴又见面了,我是高级前端进阶,由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!高级前端进阶前言今天在掘金……
无敌真寂寞!征战第20年球员中老詹得分篮板助攻抢断均第1解读国内市场手机销量大跌,iPhone表现却让人意外喵萌系的桌面好物,多模无线快银轴,雷柏MT510Pro机械键当代年轻人不爱喝茅台,偏爱这5款白酒,行家会喝河北唐山奇山秀水妙手绘就动手改造1998年任天堂无反相机东北最值得去的地方,你都去过哪些先锋服更新公告绿裔新英雄登场,隆冬节降临张天爱走机场真细节,穿短袖搭配小脚裤,连脚趾甲都做了装饰科尔我有点担心追梦和卢尼的出场时间林葳命中7记三分空砍29分新疆6人得分上双力擒同曦送对手7连伏明霞被爆净身出户,我们都在揣测,她的老公如此回复?
给远方表姐的一封信350字作文每一位抑郁症患者都是创意达人肿瘤患者各阶段的饮食应该怎样吃?盘点男人健康护肤的小细节劳有所得,从“有保障”到“节节高”写诚信可贵的话题作文小区里的叔叔雁门关,中华第一关,九塞之首《海贼王》官方杂志,尾田暗示和之国将重现“斩龙传说”,由索隆 预防孕期前置胎盘的个步骤探访航空餐食制作车间为什么航空餐难吃,却又是最安全的食物?10月3日NBA常规赛直播奇才vs76人

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形