日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
我放棄Axios,改用Alova

Axios 是一個(gè)基于 Promise 的 HTTP 客戶端,每周 npm 下載量超過(guò) 4000 萬(wàn)。 如果回到10年前,promise式的請(qǐng)求工具是一個(gè)偉大的創(chuàng)新。 它解決了繁瑣的請(qǐng)求問(wèn)題。

但隨著時(shí)間的推移,Axios 在開(kāi)發(fā)效率和性能上開(kāi)始落后。 特別是現(xiàn)在面對(duì)越來(lái)越復(fù)雜的需求,我們需要的是更加創(chuàng)新和領(lǐng)先的請(qǐng)求工具,而promise式的請(qǐng)求工具只能稱之為傳統(tǒng)。 

接下來(lái),我會(huì)揭露Axios在某些方面的不足,并推薦一個(gè)比Axios更現(xiàn)代、更創(chuàng)新的請(qǐng)求工具,也就是上面的輕量級(jí)請(qǐng)求策略庫(kù)。

一、Promise式請(qǐng)求工具(Axios)的弱點(diǎn)

1.1 與React、Vue等框架分離

現(xiàn)在前端幾乎離不開(kāi)React、Vue等前端UI框架。 axios無(wú)法深度綁定這些框架的狀態(tài),需要開(kāi)發(fā)者自行維護(hù),導(dǎo)致開(kāi)發(fā)效率低下。

1.2 性能方面沒(méi)有

現(xiàn)在是2023年,應(yīng)用已經(jīng)比10年前的應(yīng)用復(fù)雜了好幾個(gè)數(shù)量級(jí),對(duì)請(qǐng)求的要求也越來(lái)越高,以保證頁(yè)面的性能要求。 axios在這方面什么都不做,比如頻繁重復(fù)請(qǐng)求,同時(shí)發(fā)起多個(gè)相同的請(qǐng)求等。

1.3 體積臃腫

根據(jù)bundle phobia,axios在壓縮狀態(tài)下的體積是11+kb,見(jiàn)下圖

1.4 響應(yīng)數(shù)據(jù)的Ts類型定義混亂

在使用axios的時(shí)候,你可能經(jīng)常會(huì)這樣寫:

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('/xxx').then(result => {
  data.data
})

不知道Axios是故意的還是忽略了。 在上面發(fā)起的GET請(qǐng)求中,響應(yīng)數(shù)據(jù)結(jié)果的類型一直是axios.AxiosResponse,但是我們?cè)陧憫?yīng)攔截器中返回了response.data。 這導(dǎo)致陷入混亂的響應(yīng)數(shù)據(jù)類型。

2、Alova是如何解決以上問(wèn)題的?

2.1 與UI框架深度集成,自動(dòng)管理請(qǐng)求相關(guān)數(shù)據(jù)

假設(shè)我們需要發(fā)起一個(gè)基本的數(shù)據(jù)獲取請(qǐng)求,以Vue為例,直接對(duì)比代碼。

// axios



// alova



在axios中,你需要?jiǎng)?chuàng)建相應(yīng)的請(qǐng)求狀態(tài)并自行維護(hù),而Alova為你接手了這項(xiàng)工作。

2.2 開(kāi)箱即用的高性能特性

傳統(tǒng)的 Promise 風(fēng)格的請(qǐng)求工具主要定位是通過(guò) Promise 簡(jiǎn)化請(qǐng)求,提升性能可能是他們考慮最少的。 

但是,請(qǐng)求策略庫(kù)Alova強(qiáng)調(diào)了這一點(diǎn)。 在 Alova 中,默認(rèn)情況下啟用內(nèi)存。 緩存和請(qǐng)求共享,這兩個(gè)可以極大的提升請(qǐng)求性能,提升用戶體驗(yàn),減輕服務(wù)器壓力,我們一一來(lái)看。

內(nèi)存緩存

內(nèi)存模式是在響應(yīng)請(qǐng)求后,將響應(yīng)數(shù)據(jù)保存在本地內(nèi)存中。 下次再發(fā)起同樣的請(qǐng)求時(shí),將使用緩存的數(shù)據(jù),而不是再次發(fā)送請(qǐng)求。

想象一下,當(dāng)你在實(shí)現(xiàn)一個(gè)列表頁(yè)面時(shí),點(diǎn)擊列表項(xiàng)就可以進(jìn)入詳情頁(yè)面查看數(shù)據(jù)。 你會(huì)認(rèn)為用戶可能會(huì)經(jīng)常點(diǎn)擊查看列表中的詳細(xì)信息。 在詳情數(shù)據(jù)沒(méi)有變化的情況下,每次進(jìn)入詳情頁(yè)請(qǐng)求一次,每次都需要用戶等待加載,太浪費(fèi)了。 在Alova,你可以默認(rèn)享受這樣的待遇。

要求分享

您可能遇到過(guò)這種情況。 當(dāng)一個(gè)請(qǐng)求發(fā)送但沒(méi)有得到響應(yīng)時(shí),再次發(fā)起同一個(gè)請(qǐng)求,造成請(qǐng)求浪費(fèi),或者重復(fù)提交的問(wèn)題,比如下面三種場(chǎng)景:

  • 當(dāng)一個(gè)組件被創(chuàng)建時(shí),它會(huì)獲得初始化數(shù)據(jù)。 當(dāng)一個(gè)頁(yè)面同時(shí)渲染多個(gè)組件時(shí),會(huì)同時(shí)發(fā)送多個(gè)相同的請(qǐng)求。
  • 提交按鈕未禁用且用戶多次單擊提交按鈕。
  • 預(yù)加載完成前進(jìn)入預(yù)加載頁(yè)面時(shí),會(huì)多次發(fā)起同一個(gè)請(qǐng)求。

共享請(qǐng)求就是用來(lái)解決這些問(wèn)題的。 它是通過(guò)多路復(fù)用請(qǐng)求來(lái)實(shí)現(xiàn)的。 由于這種情況不能直觀展示,就不展示了。 有興趣的小伙伴可以自行體驗(yàn)。

重量輕

壓縮狀態(tài)下的Alova只有4kb+,只有Axios的30%+,看下面截圖

2.3 更直觀的響應(yīng)數(shù)據(jù)TS類型

在 axios 中,要定義響應(yīng)數(shù)據(jù)的類型是令人困惑的。 如果你是 Typescript 的重度用戶,alova 可以為你提供完整的字體體驗(yàn)。 當(dāng)你在請(qǐng)求處定義響應(yīng)數(shù)據(jù)的類型時(shí),你可以在多個(gè)地方享受它,它會(huì)讓你感覺(jué)很清晰,我們來(lái)看看。

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


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

至此,相對(duì)于傳統(tǒng)的Promise風(fēng)格的請(qǐng)求庫(kù),你可能對(duì)alova的強(qiáng)大有了初步的了解。

3. Alova的其他特點(diǎn)

3.1 類似axios的API設(shè)計(jì),更易上手熟悉

Alova 的請(qǐng)求信息結(jié)構(gòu)與 Axios 幾乎相同。 讓我們比較一下他們的 GET 和 POST 請(qǐng)求。

// 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 高性能尋呼請(qǐng)求策略

自動(dòng)維護(hù)分頁(yè)相關(guān)數(shù)據(jù)和狀態(tài),提供通用的分頁(yè)數(shù)據(jù)操作能力。 據(jù)官方介紹,可提升列表頁(yè)流暢度300%,編碼難度降低50%。 

下面是官方提供的例子,感興趣的同學(xué)可以去看看。

3.3 無(wú)感數(shù)據(jù)交互的請(qǐng)求策略

據(jù)我了解,它使用以下技術(shù):

  • 持久化請(qǐng)求隊(duì)列,保證請(qǐng)求的安全性和序列化
  • 請(qǐng)求重試策略機(jī)制,保證請(qǐng)求的順利完成
  • 虛擬響應(yīng)數(shù)據(jù)(一個(gè)創(chuàng)新概念)用作無(wú)響應(yīng)數(shù)據(jù)的占位符,以便在響應(yīng)后可以將其定位并替換為實(shí)際數(shù)據(jù)。

3.4 數(shù)據(jù)預(yù)取

數(shù)據(jù)是通過(guò)拉取數(shù)據(jù)進(jìn)行預(yù)加載,緩存在本地。 這部分?jǐn)?shù)據(jù)用到的時(shí)候,可以打緩存,直接顯示數(shù)據(jù)。 這種方式也大大提高了用戶體驗(yàn)。


文章名稱:我放棄Axios,改用Alova
文章地址:http://www.5511xx.com/article/cojsceh.html