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

axios替代方案的思考和实践

  本文转发自 https://juejin.cn/post/7213923957824979000
  axios是一个基于Promise的HTTP客户端,每周的npm下载量4000W+,如果回到在10年前,promise式的请求工具是一个很大的创新,它解决了请求繁琐的问题,在那个性能要求不那么高的年代可谓是一骑绝尘。但随着时间的推移,Axios在开发效率和性能方面开始有所落后,现在都已经是2023年了,面对日益复杂的需求,我们需要的是一款更具创新性和领先性的请求工具,而promise式的请求工具只能被称为 传统 了,如果你想保持在快速发展的前沿,那么请继续阅读。
  首先我想声明的是,我确实不是标题党,接下来我将通过暴露随着时间的推移,axios在一些方面表现的力不从心,并推荐一个新的,相比axios更具现代化和创新性的请求工具给你,它就是  轻量级的请求策略库alova 接下来我们看看Promise式请求工具的弱点(axios)1. 与React、Vue等框架割裂
  现在,React、Vue等前端UI框架对于前端来说几乎是不可缺少的,axios无法和这些框架的状态深度绑定,需要开发者自行维护它们,导致开发效率较低。 2. 在性能方面毫无作为
  2023年了,相比10年前的应用已经复杂了不知几个数量级,在请求方面要求也越来越高,来保证页面性能的要求,axios在这方面毫无作为,例如在频繁地重复请求、同时发起多个相同请求等场景。 3. 臃肿的体积
  根据bundlephobia显示,axios的体积在压缩状态下有11+kb,看下图
  image.png 4. 响应数据的Ts类型定义混乱
  在使用axios时,你可能经常会这样写: // 创建一个axios实例 const inst = axios.create({   baseURL: "https://example.com/" })  // 在响应拦截器中返回data inst.interceptors.response.use(response => {   if (response.status === 200) {     return response.data   }   throw new Error(response.status) })  interface Resp {   id: number } inst.get("/xxx").then(result => {   // result的类型总是为axios.AxiosResponse   data.data })
  不知道是axios故意为之还是忽略了,以上的发起的GET请求中,响应数据 result 的类型总是axios.AxiosResponse 的,但其实我们在响应拦截器中已经将response.data 返回了,这导致响应数据类型混乱而被困扰。在alova中是如何解决的呢?
  alova作为一个更加现代化,更加适应复杂应用的请求方案,也给出了它更加优雅的解决方案。同时为了降低给的学习成本,也保持了和axios相似的api设计,看起来就很熟悉有木有。
  alova读作"阿洛娃",虽然和axios一样都是以a开头,以下两个名称需要注意区分哦! 与UI框架深度融合,自动管理请求相关数据
  假设我们需要发起一个基本的数据获取请求,以vue为例,直接上对比代码。
  axios 
  alova 
  在axios中需要自己创建对应的请求状态并自行维护,而alova却帮你接管了这项工作 开箱即用的高性能功能
  传统Promise式的请求工具主要定位于通过Promise的方式简化请求,而提高性能可能是它们最不会考虑的一点,但作为请求策略库的alova中却着重突出这一点,在alova中默认开启了内存缓存和请求共享,这两项可以极大地提高请求性能,提升用户体验的同时还能降低服务端压力,让我们来一一了解下它们吧。
  内存缓存
  内存模式就是在请求响应后将响应数据保存在本地内存中,当下次再发起相同请求时就会使用缓存数据,而不会再次发送请求,试想一下,当你在实现一个列表页,点击列表项可以进入详情页查看数据,你会想到用户可能会频繁在列表中点击查看详情,当详情数据没有变化时,如果每一次进入详情页都要请求一次未免也太浪费了,而且每次还需要用户等待加载。在alova中你可以默认享受到这样的待遇,以下展示下效果
  screenshots.gif
  请求共享
  你可能遇到过这种情况,当一个请求发出但还未响应时,又发起了相同请求,就造成了请求浪费,或者重复提交问题,例如以下三种场景: 一个组件在创建时会获取初始化数据,当一个页面同时渲染多个此组件时,将会同时发出多次相同请求; 提交按钮未被禁用,用户点击了多次提交按钮; 当预加载还未完成时进入了预加载页面,将会发起多次相同请求;
  共享请求就是用来解决这些问题的,它是通过复用请求的方式来实现的,由于这种案例无法直观展示,就不展示了,有兴趣的小伙伴可以自行体验体验。
  除此以外,自称是请求策略库的alova还提供了特定场景下的请求策略,我们将在下文中介绍,有兴趣的小伙伴请继续往下看。 轻量级的体积
  压缩状态下的alova只有4kb+,只有axios的30%+,看下面截图
  image.png
  链接在此 更加直观的响应数据TS类型
  在axios中,你想要定义响应数据的类型真是会让人感到困惑,如果你是个Typescript的重度用户,alova可以给你提供完整的类型体验,当你在请求处定义响应数据时的类型后,你可以在多处享受到它,会让你感觉很清晰,我们来看看。 interface Resp {   id: number } const pageData = createAlova({ baseURL: "http://xxx" }).Get("/index"); const {   data,  // data的类型为Resp   loading, error, onSuccess, send } = useRequest(pageData); onSuccess(event => {   // 在成功回调中获取响应数据时,event.data的值类型也是Resp   console.log(event.data); });  const handleClick = async () => {   // send函数可以手动再次发送请求,它将可以接收到响应数据,它的值类型还是Resp   const data = await send(); }
  至此,相比传统的Promise式请求库,你可能已经初步了解了alova的厉害。
  但... 它的特性还远不止于此! alova的其他特性多UI框架同时支持
  alova同时支持react、vue、svelte,无论你使用哪种UI框架,它都能满足你。 与axios相似的api设计,用起来更简单熟悉
  alova的请求信息构造几乎和axios相同,我们来对比一下它们的GET和POST请求。
  GET请求 // axios axios.get("/index", {   // 设置请求头   headers: {     "Content-Type": "application/json;charset=UTF-8"   },   // params参数   params: {     userId: 1   } });  // alova const todoListGetter = alovaInstance.Get("/index", {   // 设置请求头   headers: {     "Content-Type": "application/json;charset=UTF-8"   },   // params参数   params: {     userId: 1   } });
  POST请求 // axios axios.post("/login", {   username: "xxx",   password: "ppp" }, {   // 设置请求头   headers: {     "Content-Type": "application/json;charset=UTF-8"   },   // params参数   params: {     userId: 1   } });  // alova const loginPoster = alovaInstance.Post("/login", {   username: "xxx",   password: "ppp" }, {   // 设置请求头   headers: {     "Content-Type": "application/json;charset=UTF-8"   },   // params参数   params: {     userId: 1   } }); (请求策略)高性能分页请求策略
  自动维护分页相关数据和状态,并提供了常用的分页数据操作能力,据官方介绍,可以让列表页流畅性提高300%,编码难度降低50%,以下是官方提供的示例,有兴趣的同学可以去看看。 (请求策略)无感数据交互
  这个在我看来,这个无感数据交互请求策略可谓是一大创举,我把它理解为更加可靠的乐观更新,官网是这样解释的:
  无感数据交互是指用户在与应用进行交互时,无需等待即可立即展示相关内容,或者提交信息时也无需等待即可展示操作结果,就像和本地数据交互一样,从而大幅提升应用的流畅性,它让用户感知不到数据传输带来的卡顿。可以更高限度地降低网络波动带来的问题,你的应用在高延迟网络甚至是断网状态下依然可用。
  在我的体验过程中,即使在弱网状态下,也可以让我感受到一种毫无延迟带来的顺畅感,你也来感受下吧。
  screenshots.gif
  据我了解,它使用以下技术: 持久化的请求队列来保证请求的安全性和串联性; 请求重试策略机制,来保证请求的顺利完成; 虚拟响应数据(一个创新的概念),来作为未响应时的数据占位,以便在响应后定位它并替换为实际数据。 数据预拉取
  通过拉取数据的方式预先加载好数据并缓存在本地,当真正用到这部分数据时就可以命中缓存并直接显示数据,这种方式也极大地提升了用户体验。 写在最后
  总之,alova作为一个新生代的请求工具,具有很大的潜力,你也想试用的话,可以点击以下链接去了解。
  更多推荐
  推荐!这款零代码制作神器, 轻松帮你灵活专业的H5页面

李靓蕾嫁给王力宏8年,5年生了三胎,后来婚姻状况如何?2013年11月27日,王力宏在社交平台公布恋情。他告诉大家,妻子李靓蕾不是娱乐圈的人不是明星,是自己可以牵手想共度未来的女生。消息一出,话题瞬间引爆网络。出道多年以来,王力宏创作陈亚男晒直播收入一个月只赚几万块零花钱!评论区再次翻车祸从口出,这四个字形容陈亚男朱单伟的婚变风波再合适不过了!众所周知,陈亚男之所以人设崩塌,从人人羡慕的百万儿媳,变成人人喊打的过街老鼠,就是因为她口无遮拦,在直播间公然吐槽自己老公近万亿资金助推中国芯,美59家巨头被迫联合行动!倪光南说得没错全球缺芯问题的出现和芯片规则的改变,让有实力的各方开始注重芯片产业,纷纷加大投入发展本地芯片行业,欧美日韩和我国都纷纷拿出有力举措加码芯片发展。这其中,进展最快的当属我们了。目前,Robotaxi准备攻占网约车经济观察报记者任晓宁北京报道11月25日,北京深秋难得的艳阳天。城东南亦庄60平方公里的土地上,100辆Robotaxi(无人驾驶出租车)正式收费运营。这距离去年10月,北京Rob不只玩车上太空,马斯克人脑植晶片明年可望人体试验马斯克称,明年可望进行人体试验,在人类大脑植入晶片,协助瘫痪病患行走。全球首富兼特斯拉及SpaceX创始人马斯克宣称,自己的大脑晶片新创公司Neuralink明年可望展开人体试验,每日一读,有益身心(50)人若少知自爱,岂有营营逐利,甘为商贾之行?只心有所系,便是欲,便当极力克治,不然恐流弊无穷。学者半日静坐,半日读书,如此三年,无不进者,常验之。孝子事亲,不可使吾亲有冷淡心,有烦恼有一种修养,叫知人不评人,知事不声张!成熟,是一种明亮而不刺眼的光辉。有句古训说知人不必言尽,言尽则无友责人不必苛尽,苛尽则众远敬人不必卑尽,卑尽则少骨。知人不言,能看破而不说破责人不苛,给别人留有余地敬人不卑,姿态要一位老僧说人一生有这三大坎,你过了几个了人一生有这三大坎周国平曾说人生的许多痛苦,都源于你盲目的较劲。我们时常会感觉自己没做什么,却身心疲惫想敞开心扉多交些朋友,却总是感觉话不投机明明生活舒适,却还总是羡慕他人的小日子。北宋赵氏王朝之悲哀前言中华上下五千年,将克己复礼做到极致的也就只有宋代的赵氏王朝了,虽说是受到程朱理学的影响,而大宋的确是牺牲了数代人的幸福才守下太祖好不容易打下的江山,而赵氏子孙在历史上总有那么一中国的青年应该是什么样?86年前的他们给了我们最好的答案来源钧正平工作室解放军新闻传播中心融媒体1935年12月,凛冬已至,滴水成冰,慵懒的阳光很难给北平这座古都带来一丝暖意,空气中不时漂浮着血腥味,更是增添了几许冷酷无情,北平实在太冷研究引力波应该会永久地扭曲时空2016年对引力波的首次探测为爱因斯坦的广义相对论提供了一次决定性的确认。然而另一个令人震惊的预言仍未得到证实。据悉,根据广义相对论,每个引力波都应该在时空结构上留下不可磨灭的印记
RedmiK60评测,同价位找到了最优解,继续焊门上一代K50系列用了当时三旗舰平台,分别是天玑8100天玑9000和骁龙8,三款机型都有着不错的口碑,到现在K50还处于缺货状态。这次的K60继续焊门,可以说比K50来的更加猛烈,人生赢家!迪玛利亚庆圣诞,餐盘全印大力神杯,拥两女儿馋哭梅西一周前,阿根廷时隔36年再次捧起大力神杯。正当所有阿根廷球员阿根廷人还沉浸在世界杯夺冠的喜悦中时,圣诞节的到来简直是无缝衔接。天使迪玛利亚,也在当地时间25日,分享了多张一家人过节云南有个女儿国,男女从不结婚竟以这种独特的方式繁衍后代众所周知,我国有56个民族。56个民族,不同民族,有不同的风土人情和风俗习惯。按照人口来分的话,其中为汉族的人口最多。汉族人民基本分布在中国各个省份以及各个地区之间,是我国的龙头民攻击别人,贬损自己!几天来,司马南与陶斯亮你来我往的隔空对话成为热搜。我也看了这些文章和视频,今天上午发了一个关于对于他们对话内容看法的帖子。想不到引来几位网友的讥讽和攻击,于是就引发了一点思考,在此我们每一天电话传情生活太忙碌,总是没时间。电话传情意,爱意满心田。我们每一天电话传情,这样的日子真好。通过电话聊天,我们享受着浪漫的恋爱感觉。自从我们认识以来,因为工作原因,我们分居在两地。有时候,流年有爱,时光芬芳作者昕月蓝殇人世间有太多的无奈,每当想起你,就会觉得一切都值得。千言万语,诉不尽我对你的爱恋,理不完我对你的思念。曾经说好了今生不会分开,可是,一个轻轻的转身,我们就相隔万水千山。未来几年,拼的是自愈力最近网上有一个帖子特别火感到难受时,你是怎么治愈自己的?评论区里五花八门的留言,诉说着自己平凡生活中的伤与痛,喜与忧。其中有句话令人印象深刻人生,就是一场得非所愿,愿非所得的矫情。我要以后振作起来从此以后,我已经长大了,我要学会振作起来,我要学会有坚强的心态,我要学会一天比一天要好起来,我要学会振作,我要学会坚强,我要有些事情不胡思狂想,我要内心阳光且快乐,温暖且充实的生活全新Win11原生录屏上线,秒杀付费!静静地做自己,让世界发现你全新Win11自带录屏上线附离线安装包用Windows系统的朋友们,应该都用过系统自带的截图工具,按下快捷键WinShiftS就能用的截图,虽说功能比较少RedmiK60,要来给各位友商们上课了安静没几天的小米,又要出来搞事咯。准确点说,这次是红米。是的,前两天刚刚升任小米集团总裁的卢伟冰。要带着RedmiK60宇宙,来给各位友商们上课了。RedmiK60宇宙,定档12月三星GalaxyS23S23和S23Ultra的主推新色泽被泄露据传,三星将在2月1日的活动中宣布GalaxyS23S23和S23Ultra。随着我们越来越接近这个日期,越来越多关于这些设备的细节开始被泄露出来。今天我们得到消息,首次得知每个型