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

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页面

山水新天地!东莞这个乡村振兴示范带一路成景以前我朋友说来我家玩,我总是婉拒。现在村里环境变好了,我主动邀请他们过来玩!东莞市东坑镇彭屋村村民彭先生告诉记者。家门口是花海,村中有碧绿栈道,彭屋村环境变化是目前东坑镇建设乡村振曾都这个村获首届省十大最具魅力乡村奖湖北日报客户端讯(通讯员曾融)白墙黛瓦掩映在绿树丛中,水泥路直通农家院,门口盛开的鲜花亮眼夺目。视频里,南郊街道邓家老塆村犹如一幅山水画。据悉,邓家老塆村在第一届湖北乡村音乐潮系列高考712分人大女学霸,连生6个孩子沦为生育机器高考考了712分被中国人民大学录取的女学霸,在毕业之后竟然嫁入贫困山村,连生6个孩子成为赤贫户。那么她为什么会放弃这大好的前途,一步一步地沦为山村农妇?飞出大山的金凤凰伍继红,出生你真的看懂狂飙在讲什么了吗?狂飙看爽了,问你一个问题,这部剧到底在讲什么?答不上来,说明你没看懂啊。是讲安心高启强,还是江湖恩怨,政治斗争?都不是,别想潜了,剧里头有两个隐藏的信息共同指向了同一个线索啊。咱们热搜爆了!知名演员涉嫌刑事犯罪,代表作琅琊榜变形金刚泰坦尼克号3月17日,配音演员姜广涛涉嫌刑事犯罪冲上微博热搜。图片来源微博3月17日,专注商业配音及相关培训的吼浪工作室在官方微博发布通告近期,我们关注到网络平台中部分账号主体针对我司及关联高启盛现身高校讲课,遭众人围堵仓皇离开,被张颂文摸脸梦回狂飙饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!3月17日,有北京城市学院的同学在学校里拍到了高启盛扮演者苏小玎的视频,引起了网友的关注。视频中可以看到,有非常多的同学聚焦315预付式消费产生纠纷,消费者该如何维权?随着人们对高质量生活的追求,办理健身卡美容服务卡服装店充值卡等成为一种普遍的消费方式,但这些预付式消费存在较大风险,经营者因各种原因关门,导致消费者卡还在钱难要回的情况时有发生。此连州镇湟川片区人大代表联络站一岗三主题五步走,让微实事落地生根举行学习宣传贯彻党的二十大精神宣讲会开展以片区微实事为主题的调研提出高质量的建议近期,连州镇湟川片区人大代表联络站开展了一岗三主题五步走季度性代表小组活动,持续推进片区微实事连州镇从保姆市长到好色女贪官尹冬梅的权色沉沦之路尹冬梅是一位曾经风光无限的女政治人物,她从医院临时工一步步晋升到枣阳市市长,被誉为保姆市长。然而,在她手握权力后,她却开始放纵自己的欲望,收受贿赂滥用职权包养小鲜肉阻挠司机恋爱等等AIGC时代到来,营销行业将迎来哪些变革和机遇?近期,ChatGPT的火热,让AI技术的应用再次进入大众视野。在ChatGPT诞生之前,大众所认识的AI普遍更擅长分析,比如猜测用户喜欢哪一类型的商品。与这一类分析式人工智能不同,广西建立专项台账重点督办提升问题线索处置质效中央纪委国家监委网站林贵宏通讯员王屿博今年以来,广西壮族自治区各级纪检监察机关将案件问题线索管理摆在重要位置,以建章立制为引领,持续强化集中管理高效分办重点督办以案促改,形成问题线
曾凡博的使用引争议,CBA球队能否以新秀为核心建队近来,北京首钢小将曾凡博引起了大家广泛的关注。一是源于他出色的表现,二是源于首钢队对他的使用。很多球迷愤愤不平,认为首钢埋没了人才,名嘴王兆丰也表示小曾如果不去点燃,而是正常去NC2023基金还能ampampquot无脑买就赚ampampquot?超7亿基民咋办?收好这条核心策略,两大方案任您选新年伊始,基金投资再出发!经济温和复苏的2023年,公募基金依然被寄予厚望。只是,在历经此前赛道轮换行情后,均衡的资产配置策略在2023年初回归了,成为业内人士分析基金配置时的主流专注密码底层技术研发,三未信安密码产业链梳理,四个核心问题(报告出品方分析师天风证券缪欣君刘静一)1。公司业务情况定位密码上游,持续增厚能力壁垒公司成立于2008年,是商用密码基础设施提供商,产品主要包括密码板卡密码整机和密码系统。公司定前浙江锋线大将被裁,广厦卡明斯已上飞机,山西应该立张宁为核心有消息称,深圳男篮裁掉了本赛季刚加盟的球员李京龙。作为名帅李春江的儿子,随着李春江在广厦下课,李京龙也是离开了效力了8个赛季之久的浙江广厦,这两赛季都是在各队漂泊。上赛季加盟广州龙今日油价消息今天1月14日,调整后全国929598号汽油价格今天是2023年1月14日星期六,也是国内油价调整计价日的第8个工作日,国际市场原油价格在连续几个工作日下跌后又一次迎来了上涨,虽然上面几篇文章都说明了油价在一月十七日晚上会预测下光伏硅片价格止跌企稳,新增产能释放完了吗?记者马悦然连续降价三周后,临近年关的硅片报价出现止跌迹象。1月12日,中国有色金属工业协会硅业分会公布本周硅片价格,M10单晶硅片(182mm150m)价格区间在3。6元3。9元片稳定!好用!高性价比的SSD!宏碁掠夺者GM35001TB前言虽然入门级的M。2PCIe4。0X4SSD越来越多,越来越便宜,但是入门级的PCIe4。0绝大部分都是无Dram缓存设计,在重载荷的情况下,容易掉速,而相反民用主流级的PCIe碳酸锂价格跌破50万元大关促进动力电池储能等生产成本降低10hrJan本报记者李春莲见习记者彭衍菘1月9日,电池级碳酸锂价格跌破50万元大关,较11月上旬的最高点跌去了约22。83。据上海钢联发布的数据显示,1月9日部分锂电材料报价下跌买华为平板送车?开起来表现如何问界M7,大家都关注它鸿蒙座舱和华为座舱带来的标签和光环,但实际跑起来能耗和充电是什么水平呢?我们实测数据,给大家参考下。纯电实测能耗纯电市区综合用时1h15min距离39。6km货拉拉司机集体罢工,为什么货拉拉想要上市就那么难前不久,相关部门再次约谈了货拉拉,要求其不要通过恶意低价等方式,来扰乱市场的正常秩序,并且相关部门对于其他几家从事互联网物流行业的公司也进行了提醒。可能有些人会问,货拉拉的服务费用聚焦亲子出行,极狐考拉如何让技术更有温度中青报中青网记者许亚杰据公安部统计,截至2022年年底,全国新能源汽车保有量达1310万辆。新注册登记新能源汽车数量从2018年的107万辆到2022年的535万辆,呈现高速增长态