您当前的位置:首页 > 电脑百科 > 软件技术 > 软件技术

我放弃 Axios,改用 Alova

时间:2023-05-05 12:08:41  来源:web前端开发  作者:

AxIOS 是一个基于 Promise 的 HTTP 客户端,每周 npm 下载量超过 4000 万。 如果回到10年前,promise式的请求工具是一个伟大的创新。 它解决了繁琐的请求问题。

但随着时间的推移,Axios 在开发效率和性能上开始落后。 特别是现在面对越来越复杂的需求,我们需要的是更加创新和领先的请求工具,而promise式的请求工具只能称之为传统。 

接下来,我会揭露Axios在某些方面的不足,并推荐一个比Axios更现代、更创新的请求工具,也就是上面的轻量级请求策略库。

一、Promise式请求工具(Axios)的弱点

1.1 与React、Vue等框架分离

现在前端几乎离不开React、Vue等前端UI框架。 axios无法深度绑定这些框架的状态,需要开发者自行维护,导致开发效率低下。

1.2 性能方面没有

现在是2023年,应用已经比10年前的应用复杂了好几个数量级,对请求的要求也越来越高,以保证页面的性能要求。 axios在这方面什么都不做,比如频繁重复请求,同时发起多个相同的请求等。

1.3 体积臃肿

根据bundle phobia,axios在压缩状态下的体积是11+kb,见下图

图片

1.4 响应数据的Ts类型定义混乱

在使用axios的时候,你可能经常会这样写:

const inst = axios.create({
  baseURL: 'https://example.com/'
})


inst.interceptors.response.use(response => {
  if (response.status === 200) {
    return response.data
  }
  throw new Error(response.status)
})


interface Resp {
  id: number
}
inst.get<Resp>('/xxx').then(result => {
  data.data
})

不知道Axios是故意的还是忽略了。 在上面发起的GET请求中,响应数据结果的类型一直是axios.AxiosResponse<Resp>,但是我们在响应拦截器中返回了response.data。 这导致陷入混乱的响应数据类型。

2、Alova是如何解决以上问题的?

2.1 与UI框架深度集成,自动管理请求相关数据

假设我们需要发起一个基本的数据获取请求,以Vue为例,直接对比代码。

// axios
<template>
  <div v-if="loading">Loading...</div>
  <div v-else-if="error" class="error">
    {{ error.message }}
  </div>
  <div v-else>{{ data }}</div>
</template>


<script setup>
import axios from 'axios';
import { ref, onMounted } from 'vue';


const loading = ref(false);
const error = ref(null);
const data = ref(null);


const requestData = () => {
  loading.value = true;
  axios.get('http://xxx/index').then(result => {
    data.value = result;
  }).catch(e => {
    error.value = e;
  }).finally(() => {
    loading.value = false;
  });
}
onMounted(requestData);
</script>
 
// alova
<template>
  <div v-if="loading">Loading...</div>
  <div v-else-if="error" class="error">
    {{ error.message }}
  </div>
  <div v-else>{{ data }}</div>
</template>


<script setup>
import { createAlova, useRequest } from 'alova';


const pageData = createAlova({ baseURL: 'http://xxx' }).Get('/index');
const { loading, data, error } = useRequest(pageData);
</script>

在axios中,你需要创建相应的请求状态并自行维护,而Alova为你接手了这项工作。

2.2 开箱即用的高性能特性

传统的 Promise 风格的请求工具主要定位是通过 Promise 简化请求,提升性能可能是他们考虑最少的。 

但是,请求策略库Alova强调了这一点。 在 Alova 中,默认情况下启用内存。 缓存和请求共享,这两个可以极大的提升请求性能,提升用户体验,减轻服务器压力,我们一一来看。

内存缓存

内存模式是在响应请求后,将响应数据保存在本地内存中。 下次再发起同样的请求时,将使用缓存的数据,而不是再次发送请求。

想象一下,当你在实现一个列表页面时,点击列表项就可以进入详情页面查看数据。 你会认为用户可能会经常点击查看列表中的详细信息。 在详情数据没有变化的情况下,每次进入详情页请求一次,每次都需要用户等待加载,太浪费了。 在Alova,你可以默认享受这样的待遇。

要求分享

您可能遇到过这种情况。 当一个请求发送但没有得到响应时,再次发起同一个请求,造成请求浪费,或者重复提交的问题,比如下面三种场景:

  • 当一个组件被创建时,它会获得初始化数据。 当一个页面同时渲染多个组件时,会同时发送多个相同的请求。
  • 提交按钮未禁用且用户多次单击提交按钮。
  • 预加载完成前进入预加载页面时,会多次发起同一个请求。

共享请求就是用来解决这些问题的。 它是通过多路复用请求来实现的。 由于这种情况不能直观展示,就不展示了。 有兴趣的小伙伴可以自行体验。

重量轻

压缩状态下的Alova只有4kb+,只有Axios的30%+,看下面截图

2.3 更直观的响应数据TS类型

在 axios 中,要定义响应数据的类型是令人困惑的。 如果你是 Typescript 的重度用户,alova 可以为你提供完整的字体体验。 当你在请求处定义响应数据的类型时,你可以在多个地方享受它,它会让你感觉很清晰,我们来看看。

interface Resp {
  id: number
}
const pageData = createAlova({ baseURL: 'http://xxx' }).Get<Resp>('/index');
const {
  data,  
  loading, error, onSuccess, send
} = useRequest(pageData);
onSuccess(event => {
  console.log(event.data);
});


const handleClick = async () => {
  const data = awAIt send();
}

至此,相对于传统的Promise风格的请求库,你可能对alova的强大有了初步的了解。

3. Alova的其他特点

3.1 类似axios的API设计,更易上手熟悉

Alova 的请求信息结构与 Axios 几乎相同。 让我们比较一下他们的 GET 和 POST 请求。

// axios
axios.get('/index', {
  headers: {
    'Content-Type': 'Application/json;charset=UTF-8'
  },
  params: {
    userId: 1
  }
});


// alova
const todoListGetter = alovaInstance.Get('/index', {
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  },
  params: {
    userId: 1
  }
});
 
// axios
axios.post('/login', {
  username: 'xxx',
  password: 'ppp'
}, {
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  },
  params: {
    userId: 1
  }
});


// alova
const loginPoster = alovaInstance.Post('/login', {
  username: 'xxx',
  password: 'ppp'
}, {
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  },
  params: {
    userId: 1
  }
});

3.2 高性能寻呼请求策略

自动维护分页相关数据和状态,提供通用的分页数据操作能力。 据官方介绍,可提升列表页流畅度300%,编码难度降低50%。 

下面是官方提供的例子,感兴趣的同学可以去看看。

3.3 无感数据交互的请求策略

据我了解,它使用以下技术:

  • 持久化请求队列,保证请求的安全性和序列化
  • 请求重试策略机制,保证请求的顺利完成
  • 虚拟响应数据(一个创新概念)用作无响应数据的占位符,以便在响应后可以将其定位并替换为实际数据。

3.4 数据预取

数据是通过拉取数据进行预加载,缓存在本地。 这部分数据用到的时候,可以打缓存,直接显示数据。 这种方式也大大提高了用户体验。



Tags:Axios   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Vue3+Axios网络请求封装
Vue3是Vue.js框架的最新版本,它在语法、性能和开发体验等方面都进行了优化和改进。而Axios则是一个基于Promise的HTTP客户端,可以在浏览器和Node.js中使用。Axios可以帮助我们...【详细内容】
2023-05-30  Search: Axios  点击:(237)  评论:(0)  加入收藏
我放弃 Axios,改用 Alova
Axios 是一个基于 Promise 的 HTTP 客户端,每周 npm 下载量超过 4000 万。 如果回到10年前,promise式的请求工具是一个伟大的创新。 它解决了繁琐的请求问题。但随着时间的推...【详细内容】
2023-05-05  Search: Axios  点击:(445)  评论:(0)  加入收藏
Vue回炉重造之三次封装axios
源码目录 在src目录下建立一个request文件夹。里面建立两个文件: http.js api.js 源码内容 http.js import axios from &#39;axios&#39; // 引入axios import store from &#3...【详细内容】
2022-06-02  Search: Axios  点击:(285)  评论:(0)  加入收藏
axios配置vue项目本地测试环境跨域解决方法
问题后端已经配置好了跨域,前端本地搭建vue-cli测试环境的时候如何解决跨域?(前提进行了基本的axios封装)分析这个时候后端API是一个明确的外网环境(使用外网IP或固定域名访问),...【详细内容】
2021-11-03  Search: Axios  点击:(621)  评论:(0)  加入收藏
Vue中Axios封装API接口的思路及方法
一、axios的封装在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应...【详细内容】
2020-10-12  Search: Axios  点击:(693)  评论:(0)  加入收藏
一篇文章实现vue集成axios、调用、跨域、配置多个跨域
前言:Axios是一个来自于vue官方推荐的一个用于与后端(Java、go、Python、PHP)进行数据交互的JavaScript库,你可以通过axios库快速高效的与后端进行数据交互,是现文件上传等复杂功...【详细内容】
2020-10-09  Search: Axios  点击:(457)  评论:(0)  加入收藏
▌简易百科推荐
如何在Windows 10中查看电脑的名称?这里提供详细步骤
你想在有多台计算机组成的网络上查找你的计算机吗?一种方法是找到你的电脑名称,然后在网络上匹配该名称。下面是如何在Windows 10中使用图形和命令行方法查看你的计算机名称。...【详细内容】
2024-04-10  驾驭信息纵横科技    Tags:Windows 10   点击:(2)  评论:(0)  加入收藏
移动版 Outlook 解锁新技能,可验证登录 OneDrive 等微软服务
IT之家 4 月 9 日消息,微软公司近日发布新闻稿,宣布用户可以使用 Outlook 手机应用,轻松登录 Teams、OneDrive、Microsoft 365 以及 Windows 等微软账号服务。移动端 Outlook...【详细内容】
2024-04-09    IT之家  Tags:Outlook   点击:(0)  评论:(0)  加入收藏
Win10/Win11和 macOS用户反馈:谷歌云服务“捆绑”系统 DNS 设置
IT之家 4 月 6 日消息,谷歌公司承认旗下的 Google One 订阅服务中存在问题,在 Windows 10、Windows 11 以及 macOS 系统上会更改系统 DNS 设置,变更为 8.8.8.8 地址。Google On...【详细内容】
2024-04-08    IT之家  Tags:Win10   点击:(7)  评论:(0)  加入收藏
电脑卡顿怎么重装系统,快看这篇
电脑卡顿时,重装系统确实是一种可能的解决方案。以下是重装系统的详细步骤:备份重要数据:首先,你需要将电脑中的重要文件和数据备份到外部存储设备(如U盘、移动硬盘或云存储)中,以...【详细内容】
2024-04-04  科技数码前锋    Tags:重装系统   点击:(2)  评论:(0)  加入收藏
如何检查电脑的最近历史记录?这里提供详细步骤
如果你怀疑有人在使用你的计算机,并且你想查看他们在做什么,下面是如何查看是否有访问内容的痕迹。如何检查我的计算机的最近历史记录要检查计算机的最近历史记录,应该从web浏...【详细内容】
2024-03-30  驾驭信息纵横科技    Tags:历史记录   点击:(0)  评论:(0)  加入收藏
关于Windows中AppData的相关知识,看这篇文章就可以了
如果AppData文件夹占用了你电脑上的太多空间,则需要清理AppData文件夹。下面是一些帮助你在Windows计算机上进行AppData清理的方法。什么是AppData文件夹AppData文件夹是保存...【详细内容】
2024-03-30  驾驭信息纵横科技    Tags:AppData   点击:(2)  评论:(0)  加入收藏
微软 Edge 浏览器将迎来“内存限制器”功能,用户可自主控制 Edge 内存占用
IT之家 3 月 28 日消息,微软即将为其 Edge 浏览器带来一项实用新功能,据悉该公司正在测试一项内置的内存限制器,这项功能可以让用户限制 Edge 所占用的内存,防止浏览器超出内存...【详细内容】
2024-03-29    IT之家  Tags:Edge   点击:(14)  评论:(0)  加入收藏
一寸照片的大小如何压缩?四个实测效果很好的方法
一寸照片作为生活中常见的尺寸之一,常用于各类证件照与证明文件的制作。然而,受限于其较为狭小的尺寸,上传及打印过程中很容易出现尺寸超限的情况。所以,这个时候就需要对其体积...【详细内容】
2024-03-18  宠物小阿涛    Tags:压缩   点击:(14)  评论:(0)  加入收藏
手机投屏到电脑/电视的方法
方法一:Win10自带的投影功能1、将手机和电脑连接同一个无线网络。2、选择【开始】>【设置】>【系统】>【投影到此电脑】3、将默认的始终关闭的选项更改为所有位置都可用。4、...【详细内容】
2024-03-18    老吴讲I  Tags:投屏   点击:(16)  评论:(0)  加入收藏
微软商店怎么卸载应用 一分钟快速看懂!
微软商店怎么卸载应用 一分钟快速看懂!微软公司(Microsoft Corporation)是一家全球领先的科技企业,总部位于美国华盛顿州的雷德蒙德。成立于1975年,由比尔&middot;盖茨和保罗&mid...【详细内容】
2024-02-27  婷婷说体育    Tags:微软商店   点击:(36)  评论:(0)  加入收藏
站内最新
站内热门
站内头条