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

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

央行降准意味着什么?调节货币供应量,减少央行存款准备金,市场上的货币供应量就增加了,你把存款准备金搞清楚了,你就知道降准是什么意思了,首先要知道银行里的钱是谁的,肯定是我们储户的钱啊,银行就是靠低存高股市想做价值投资,怎么计算一只股票的价值估值和安全边际?谢谢,感谢邀约!我是有着十年个人投资经验,七年机构研究经历的王晨,对于股票和大宗商品投资和研究有丰富的经验。看到有朋友在问如何给股票进行估值?估值是否对投资股票有帮助呢?由于我曾在企业精简人员,很多经验丰富的老员工被辞退,技术一般的新员工得以保留,这是为什么?企业在精简人员或者裁员时,必然首先将情感放在末位,而以经营管理效率等作为最重要的指标来决定人员的去留。老鬼站在几个角度和大家进行分析一裁员时的一个重要原则企业不需要屠龙高手经验丰富美剧里的哪个女主角惊艳了你?美剧通常是指美国的电视剧,不包括电影。惊艳到我的女主,是谁?先看照片吧!来自西部世界的女主埃文蕾切尔伍德EvanRachelWood。现年32岁的埃文出生于演艺世家,家庭的熏陶,使有什么好的恐怖电影推荐?胆小的勿进哦,如有引起不安请谅解哦,哈,给大家共享免费看电影方法搜索公众号甜心影视关注发送你想看的电影或者电视剧名字就可以免费看了!接下来给大家介绍几部精彩又恐怖的电影一圣血讲述的上古卷轴5中,最震撼你的剧情或是某个任务是什么?你好,很有幸回答你的问题。作为一个玩了两年半的小萌新,我觉得我有回答这个问题的资格。首先上古卷轴5是一个高度自由的RPG游戏,玩家在里面在开头就可以选择跑或者跟随,也可以直接成为一有哪些曾经流行,但现在已经听不到的足球词汇?盘点那些已经消失的经典足球赛事!曾经流行,如今却听不到的足球词汇,我暂时想到这几个。欧洲三大杯当年欧洲俱乐部冠军杯欧洲优胜者杯和欧洲联盟杯号称欧洲三大杯,金球奖得主未必是从欧冠球队冰箱老是结冰怎么办?冰箱冷藏室总是结冰,问题不大烦恼不小。费不费电的先放在一边,关键看着就让人恶心有时候还会冻坏冰块旁边的食物。那冰箱冷藏室究竟为什么结冰,又应该怎么办呢?冷藏室为什么会结冰?在回答问定制的助听器很堵耳怎么办?佩戴助听器前耳道是开放的,声音经过耳道传至鼓膜,一部分声音能量会反射出来,戴上助听器后,这部分声音反射不出来,又通过鼓膜传至听神经。会感觉闷或者有回声。通常情况下低频更好地人容易有韭菜除了和鸡蛋打牌包饺子外,还可以做什么美食?您好,朋友,很高兴能回答这个问题,本回答内容为本人自行整理提供,今日头条互联网首发,不足之处在所难免,望浏览的朋友多提意见相互提高。欢迎关注美食旅途头条号,更多美食更多美味分享。韭博士应届延期,考上公务员,岗位只要硕士学位,可以放弃读博进入公务员队伍吗?鉴于你的这种情况,建议你继续读完博士,拿到博士学位之后再考虑就业的问题。主要理由如下。一是拿到博士学位时间不用很长。既然你是应届延期,说明你已经在读博士。正常情况而言,你只需要一年
推动实现更加强劲绿色健康的全球发展中国愿同世界各国一道,坚持以人民为中心,坚持普惠包容创新驱动人与自然和谐共生,推动将发展置于国际优先议程,加快落实联合国2030年可持续发展议程,推动实现更加强劲绿色健康的全球发展桂林卫健委回应网传全州超生子女调剂告知书正协调处理7月5日,一则关于广西壮族自治区桂林市全州县对强行超生子女进行社会调剂的消息引起社会关注。5日上午,桂林市卫生健康委员会工作人员就此事答复南都记者,我们目前正在向领导汇报,协调处理广西全州超生孩子全县统一社会调剂?当地回应相关信息正在核实记者李静李岩松7月5日,一份落款为全州县卫生健康局,关于唐月英邓振生信访事项不予受理告知书,在网上引起热议。告知书中提到,全州县信访局于2022年6月28日将你们向广西壮族自治区信三涨停紧接两跌停!又见LOF大走过山车,这类情况需警惕中国基金报记者方丽实习生王佳霖一只LOF基金在连续三个涨停之后马上来了两大跌停!最近市场出现这一幕引起行业关注。数据显示,有一些LOF的二级市场交易价格坐上过山车,基金公司也紧急发黄鼠狼为何不能吃?老一辈说吃了遭报应,李时珍却给出另一个答案1hr2019年10月6号一大早,商洛市柞水县曹坪镇的吕师傅和往常一样去给鸡喂食,可刚走进鸡棚就看到惨烈的一幕他养的十八只鸡全部死了!吕师傅离开向当地派出所报了警,民警根据现场察看半场领先29分!周琦78,王哲林制霸篮下,中国队10人火力全开北京时间7月4日下午,中国男篮参加世预赛第四场比赛,上一场惨败给澳大利亚之后,球队的士气没有受到太多影响,这场对手中国台北队偏弱,赢球基本是没有悬念的。之前的交手,中国队9458大别再假装性感了,这10位女港星告诉你,什么才叫媚而不俗在影视剧中从来就不缺乏展示女性美好的镜头,因为这样的画面不仅是艺术的一种体现,最主要的还可以提高收视率。然而近些年来这种对女性美好的展示仿佛变了味,女演员的衣服越穿越少,动作越来越徐翔之妻发股评,网友评论亮了!最新回应中国基金报颜颖离婚纠纷还未告一段落,总舵主夫人就开始转型了?7月4日早间,徐翔妻子应莹在其个人公众号及微博上发布每周市场点评,对上周市场行情及热门个股进行点评,一时间引发网友热议。印度与中国的相同和不同点,我列举了22条,剩下的你来补作为世界上仅有的两个人口超过10亿的国家,印度和中国之间一直都充满了话题。都是有着上千年文明的古老国家,中印之间也是陆地上接壤的国家。那我们就看一下中印两国人有什么相同的和不同的地毛主席的首任妻子罗一秀,虽未被承认,建国后主席却为她破例在毛家族谱上,毛泽东原配妻子的位置上,赫然写着罗一秀三个字。在大多数人的心目中,毛主席的第一任妻子是启蒙老师杨昌济之女杨开慧,两人之间的感情,已经超出单纯的爱情,还有一起革命的战友意欲何为?美军高级将领竟然主动给台海局势降温?最近一段时间,美西方政客频频借各种场合密集发表涉台错误言论,摆出一副要与解放军大干一场的阵仗。但令人意外的是,最近美国参谋首长联席会议主席米利却公开表示,中国大陆对台湾地区的攻击并