日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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 數據預取

數據是通過拉取數據進行預加載,緩存在本地。 這部分數據用到的時候,可以打緩存,直接顯示數據。 這種方式也大大提高了用戶體驗。

分享到:
標簽:Axios
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定