精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

React請求機制優化思路介紹

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-08-22 10:04 ? 次閱讀

說起數據加載的機制,有一個繞不開的話題就是前端性能,很多電商門戶的首頁其實都會做一些垂直的定制優化,比如讓請求在頁面最早加載,或者在前一個頁面就進行預加載等等。隨著 react18 的發布,請求機制這一塊也是被不斷談起,并且在后續其實也給出了明確的方向。

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

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

為了阻止組件間數據獲取的這種順序阻塞,另一種方法就是在組件加載前可以使用 Promise.all 獲取所有的請求數據,這樣在組件加載時就已經獲取到所有的數據了。這種方式解決了組件加載順序阻塞彼此數據流獲取的問題,但是也產生了一個新的問題,在請求完成之前頁面都會是空白的。

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

基于第二種先請求后渲染的方式,還可以使用 Suspense 將請求和渲染并行化,Suspense 可以使得組件可以 “等待” 某些操作結束后,再進行渲染。而這種方式如果要用到實際項目中,還需要考慮 C1、C2、C3 對應的請求寫在哪里,如果寫在組件中,那么加載還是慢的。如果拆分出來,就需要考慮文件拆分、code splitting 等工程化問題。

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

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

// html頭部引入request.js

在發送完請求之后,需要將返回的數據注入到 React 組件中,這部分怎么注入呢?簡單的代碼示例如下:

// request.js 中請求部分 evt是發布訂閱模式的一個實例
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) {
    // 這里已經獲取到了請求的返回值
doSomething();
} else {
InitData.on("init_data", (data)=> {
    // 利用發布訂閱模式獲取到數據
doSomething();
});
}
}, []);

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • HTML
    +關注

    關注

    0

    文章

    277

    瀏覽量

    34496
  • 數據加載
    +關注

    關注

    0

    文章

    6

    瀏覽量

    6282

原文標題:React請求機制優化思路

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux開發_采用線程處理網絡請求

    介紹Linux下網絡編程、線程編程,select機制,利用子線程響應TCP服務器的請求
    的頭像 發表于 09-17 15:21 ?821次閱讀

    優化React開發體驗

    從零構建React開發環境(四)
    發表于 04-01 16:00

    React環境配置介紹

    React 學習篇(二)
    發表于 04-03 11:34

    React路由狀態如何管理

    React 路由狀態管理總結
    發表于 05-19 07:11

    React優勢,react學習筆記分享

    1、React優勢react適合大型團隊的開發,每個人負責自己的組件,開發完畢之后由react渲染到前端頁面
    發表于 10-27 06:53

    GPRS優化思路總結報告

    GPRS優化思路總結報告:一、概述 2二、無線優化思路 2三、(E)GPRS網絡資源容量分析優化 53.1、
    發表于 07-27 21:29 ?26次下載

    GPRS優化思路總結報告_李青春

    (E)GPRS 優化思路通信網絡優化,GSM上網,PDCH,EDGEGPRS.
    發表于 01-14 15:21 ?4次下載

    詳談 Vue 和 React 的八大區別

    為什么 React 不精確監聽數據變化呢 ?這是因為 Vue 和 React 設計理念上的區別, Vue 使用的是可變數據,而React更強調數據的不可變。所以應該說沒有好壞之分,Vue更加簡單,而
    的頭像 發表于 09-15 15:27 ?8067次閱讀
    詳談 Vue 和 <b class='flag-5'>React</b> 的八大區別

    React-in-patterns React開發設計模式/技術列表

    react-in-patterns.zip
    發表于 04-19 11:28 ?0次下載
    <b class='flag-5'>React</b>-in-patterns <b class='flag-5'>React</b>開發設計模式/技術列表

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

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

    React Native for Windows使用React構建原生Windows應用

    ./oschina_soft/react-native-windows.zip
    發表于 06-22 10:06 ?1次下載
    <b class='flag-5'>React</b> Native for Windows使用<b class='flag-5'>React</b>構建原生Windows應用

    簡要介紹React和Vue

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

    Web前端性能優化思路

    本文旨在整理常見Web前端性能優化思路,可供前端開發參考。因為力求精簡,限于篇幅,所以并未詳述具體實施方案。 基于現代Web前端框架的應用,其原理是通過瀏覽器向服務器發送網絡請求,獲取必要
    的頭像 發表于 10-18 14:21 ?953次閱讀
    Web前端性能<b class='flag-5'>優化</b><b class='flag-5'>思路</b>

    關于“React和Vue該用哪個”

    React 有函數式組件的和類組件兩種寫法,鑒于 class 寫法較老,且這種寫法不利于構建工具的 Tree-shaking ,可能導致構建產物體積增加,而函數式組件的 hooks 寫法更符合未來的潮流 , 所以類組件在此也不做詳細的介紹,只選取函數式組件寫法的
    的頭像 發表于 11-10 10:15 ?864次閱讀

    使用SSR構建React應用的步驟

    使用SSR(Server-Side Rendering,服務器端渲染)構建React應用的步驟通常包括以下幾個階段: 一、項目初始化與配置 創建React項目 : 可以使用Create React
    的頭像 發表于 11-18 11:30 ?227次閱讀