欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

React請(qǐng)求機(jī)制優(yōu)化思路介紹

OSC開(kāi)源社區(qū) ? 來(lái)源:OSCHINA 社區(qū) ? 2023-08-22 10:04 ? 次閱讀

說(shuō)起數(shù)據(jù)加載的機(jī)制,有一個(gè)繞不開(kāi)的話題就是前端性能,很多電商門(mén)戶的首頁(yè)其實(shí)都會(huì)做一些垂直的定制優(yōu)化,比如讓請(qǐng)求在頁(yè)面最早加載,或者在前一個(gè)頁(yè)面就進(jìn)行預(yù)加載等等。隨著 react18 的發(fā)布,請(qǐng)求機(jī)制這一塊也是被不斷談起,并且在后續(xù)其實(shí)也給出了明確的方向。

假如我們頁(yè)面中有三個(gè)組件 C1、C2、C3 依次嵌套,每個(gè)組件中有對(duì)應(yīng)的請(qǐng)求 F1、F2、F3,通常大多數(shù)人會(huì)使用 useeffect 和 state 變量來(lái)實(shí)現(xiàn)數(shù)據(jù)流的獲取,這樣就意味著必須在組件加載時(shí)才能發(fā)起請(qǐng)求,所有數(shù)據(jù)獲取都發(fā)生在組件的生命周期中,如下圖所示,我們可以將這種獲取數(shù)據(jù)的方式稱作瀑布流渲染,但是這種方式有一個(gè)問(wèn)題是,在這種方法中,組件之間的數(shù)據(jù)獲取是按順序進(jìn)行的,這實(shí)際上意味著它們彼此阻塞,如果組件的層級(jí)嵌套很深的話,就會(huì)導(dǎo)致頁(yè)面的加載時(shí)間特別長(zhǎng)。

fd03a43e-4014-11ee-ac96-dac502259ad0.png

為了阻止組件間數(shù)據(jù)獲取的這種順序阻塞,另一種方法就是在組件加載前可以使用 Promise.all 獲取所有的請(qǐng)求數(shù)據(jù),這樣在組件加載時(shí)就已經(jīng)獲取到所有的數(shù)據(jù)了。這種方式解決了組件加載順序阻塞彼此數(shù)據(jù)流獲取的問(wèn)題,但是也產(chǎn)生了一個(gè)新的問(wèn)題,在請(qǐng)求完成之前頁(yè)面都會(huì)是空白的。

fd24d5c8-4014-11ee-ac96-dac502259ad0.png

基于第二種先請(qǐng)求后渲染的方式,還可以使用 Suspense 將請(qǐng)求和渲染并行化,Suspense 可以使得組件可以 “等待” 某些操作結(jié)束后,再進(jìn)行渲染。而這種方式如果要用到實(shí)際項(xiàng)目中,還需要考慮 C1、C2、C3 對(duì)應(yīng)的請(qǐng)求寫(xiě)在哪里,如果寫(xiě)在組件中,那么加載還是慢的。如果拆分出來(lái),就需要考慮文件拆分、code splitting 等工程化問(wèn)題。

fd4ba2c0-4014-11ee-ac96-dac502259ad0.png

在認(rèn)真的分析了以上三種方式以后,發(fā)現(xiàn)各有優(yōu)劣,同時(shí)基于上述方案,我也提供一個(gè)請(qǐng)求優(yōu)化的思路,首先將請(qǐng)求的 JS 單獨(dú)拆分出來(lái)打一個(gè)文件 request.js,在 html 頭部引入 request.js 并使用 async 屬性讓腳本并行執(zhí)行 (如下代碼所示),這樣既可以保證我們的請(qǐng)求在最開(kāi)始就能發(fā)出,也能不阻塞后續(xù) React 代碼打包的 js 文件的執(zhí)行,相當(dāng)請(qǐng)求和渲染的代碼在并行執(zhí)行。

// html頭部引入request.js

在發(fā)送完請(qǐng)求之后,需要將返回的數(shù)據(jù)注入到 React 組件中,這部分怎么注入呢?簡(jiǎn)單的代碼示例如下:

// request.js 中請(qǐng)求部分 evt是發(fā)布訂閱模式的一個(gè)實(shí)例
window.InitData = {
    data: null,
    on: (msg, fn)=> evt.on(msg, e => fn(e)),
    emit: (msg, data)=> evt.emit(msg, data),
};

fetch().then(rs => {
    InitData.data = rs;
    InitData.emit("init_data", rs);
    return rs;
});
// index.js react代碼邏輯

…….

useEffect(()=> {
if (InitData.data !== null) {
    // 這里已經(jīng)獲取到了請(qǐng)求的返回值
doSomething();
} else {
InitData.on("init_data", (data)=> {
    // 利用發(fā)布訂閱模式獲取到數(shù)據(jù)
doSomething();
});
}
}, []);

…….
總體思路就是在 html 中最先加載單獨(dú)打包出來(lái)的請(qǐng)求文件并加入 async 屬性使腳本并行執(zhí)行,將返回的數(shù)據(jù)掛載到 window 下或者利用發(fā)布訂閱模式將數(shù)據(jù)注入到 react 組件中。這樣其實(shí)類似于邊請(qǐng)求邊渲染的模式,利用提前請(qǐng)求來(lái)減少加載的時(shí)間。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HTML
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    36872
  • 數(shù)據(jù)加載
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    6303

原文標(biāo)題:React請(qǐng)求機(jī)制優(yōu)化思路

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux開(kāi)發(fā)_采用線程處理網(wǎng)絡(luò)請(qǐng)求

    介紹Linux下網(wǎng)絡(luò)編程、線程編程,select機(jī)制,利用子線程響應(yīng)TCP服務(wù)器的請(qǐng)求
    的頭像 發(fā)表于 09-17 15:21 ?909次閱讀

    優(yōu)化React開(kāi)發(fā)體驗(yàn)

    從零構(gòu)建React開(kāi)發(fā)環(huán)境(四)
    發(fā)表于 04-01 16:00

    React環(huán)境配置介紹

    React 學(xué)習(xí)篇(二)
    發(fā)表于 04-03 11:34

    React路由狀態(tài)如何管理

    React 路由狀態(tài)管理總結(jié)
    發(fā)表于 05-19 07:11

    React優(yōu)勢(shì),react學(xué)習(xí)筆記分享

    1、React優(yōu)勢(shì)react適合大型團(tuán)隊(duì)的開(kāi)發(fā),每個(gè)人負(fù)責(zé)自己的組件,開(kāi)發(fā)完畢之后由react渲染到前端頁(yè)面
    發(fā)表于 10-27 06:53

    GPRS優(yōu)化思路總結(jié)報(bào)告

    GPRS優(yōu)化思路總結(jié)報(bào)告:一、概述 2二、無(wú)線優(yōu)化思路 2三、(E)GPRS網(wǎng)絡(luò)資源容量分析優(yōu)化 53.1、
    發(fā)表于 07-27 21:29 ?26次下載

    GPRS優(yōu)化思路總結(jié)報(bào)告_李青春

    (E)GPRS 優(yōu)化思路通信網(wǎng)絡(luò)優(yōu)化,GSM上網(wǎng),PDCH,EDGEGPRS.
    發(fā)表于 01-14 15:21 ?4次下載

    詳談 Vue 和 React 的八大區(qū)別

    為什么 React 不精確監(jiān)聽(tīng)數(shù)據(jù)變化呢 ?這是因?yàn)?Vue 和 React 設(shè)計(jì)理念上的區(qū)別, Vue 使用的是可變數(shù)據(jù),而React更強(qiáng)調(diào)數(shù)據(jù)的不可變。所以應(yīng)該說(shuō)沒(méi)有好壞之分,Vue更加簡(jiǎn)單,而
    的頭像 發(fā)表于 09-15 15:27 ?8153次閱讀
    詳談 Vue 和 <b class='flag-5'>React</b> 的八大區(qū)別

    React-in-patterns React開(kāi)發(fā)設(shè)計(jì)模式/技術(shù)列表

    react-in-patterns.zip
    發(fā)表于 04-19 11:28 ?0次下載
    <b class='flag-5'>React</b>-in-patterns <b class='flag-5'>React</b>開(kāi)發(fā)設(shè)計(jì)模式/技術(shù)列表

    React Sight React組件層次可視化工具

    ./oschina_soft/React-Sight.zip
    發(fā)表于 05-18 15:36 ?4次下載
    <b class='flag-5'>React</b> Sight <b class='flag-5'>React</b>組件層次可視化工具

    React Native for Windows使用React構(gòu)建原生Windows應(yīng)用

    ./oschina_soft/react-native-windows.zip
    發(fā)表于 06-22 10:06 ?1次下載
    <b class='flag-5'>React</b> Native for Windows使用<b class='flag-5'>React</b>構(gòu)建原生Windows應(yīng)用

    簡(jiǎn)要介紹React和Vue

    以上代碼描述了React怎么在指定的頁(yè)面元素(id為id01的div元素)中改變相應(yīng)的字符串內(nèi)容(從"Hello World!"到"Hello John Doe!")。其中第5行的ReactDOM.render()是React JS庫(kù)提供的一個(gè)方法
    發(fā)表于 07-14 09:32 ?1049次閱讀

    Web前端性能優(yōu)化思路

    本文旨在整理常見(jiàn)Web前端性能優(yōu)化思路,可供前端開(kāi)發(fā)參考。因?yàn)榱η缶?jiǎn),限于篇幅,所以并未詳述具體實(shí)施方案。 基于現(xiàn)代Web前端框架的應(yīng)用,其原理是通過(guò)瀏覽器向服務(wù)器發(fā)送網(wǎng)絡(luò)請(qǐng)求,獲取必要
    的頭像 發(fā)表于 10-18 14:21 ?1021次閱讀
    Web前端性能<b class='flag-5'>優(yōu)化</b><b class='flag-5'>思路</b>

    關(guān)于“React和Vue該用哪個(gè)”

    React 有函數(shù)式組件的和類組件兩種寫(xiě)法,鑒于 class 寫(xiě)法較老,且這種寫(xiě)法不利于構(gòu)建工具的 Tree-shaking ,可能導(dǎo)致構(gòu)建產(chǎn)物體積增加,而函數(shù)式組件的 hooks 寫(xiě)法更符合未來(lái)的潮流 , 所以類組件在此也不做詳細(xì)的介紹,只選取函數(shù)式組件寫(xiě)法的
    的頭像 發(fā)表于 11-10 10:15 ?967次閱讀

    使用SSR構(gòu)建React應(yīng)用的步驟

    使用SSR(Server-Side Rendering,服務(wù)器端渲染)構(gòu)建React應(yīng)用的步驟通常包括以下幾個(gè)階段: 一、項(xiàng)目初始化與配置 創(chuàng)建React項(xiàng)目 : 可以使用Create React
    的頭像 發(fā)表于 11-18 11:30 ?405次閱讀