日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

全世界互聯網變慢了!React社區鬧翻天,官方最終讓步!

來源: 責編: 時間:2024-07-01 17:16:14 205觀看
導讀出品 | 51CTO技術棧(微信號:blog51cto)React的一個改動細節引起了前端圈的聲討。“這項改動違背了React的第一設計原則!”“這會顯著降低使用React框架的網站的性能。”“這是一個令人惱火、無法理解的改動!”提起React,作

出品 | 51CTO技術棧(微信號:blog51cto)enB28資訊網——每日最新資訊28at.com

React的一個改動細節引起了前端圈的聲討。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

“這項改動違背了React的第一設計原則!”enB28資訊網——每日最新資訊28at.com

“這會顯著降低使用React框架的網站的性能。”enB28資訊網——每日最新資訊28at.com

“這是一個令人惱火、無法理解的改動!”enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

提起React,作為世界上最受歡迎和使用最多的UI框架,許多網絡“大牌”都有它的身影:不用提新潮一代的Netflix、Airbnb、Discord 等,僅誕生地Meta(Facebook、Instagram 和 Whatsapp)就已經足夠讓其揚名天下。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

考慮到 React 用于創建數十億人使用的用戶界面,這樣說也不為過:互聯網流量的很大一部分是由 React “處理”的。enB28資訊網——每日最新資訊28at.com

一、一場討論讓React官方暫停了項目

enB28資訊網——每日最新資訊28at.com

這里的主要話題,正在討論的變化正是React19版本。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

隨著React 19全新功能和 DX 改進,處理并行fetching問題的方式發生了變化:禁用了同一 Suspense 邊界內兄弟節點的并行渲染。這實質上為在這些兄弟節點內部獲取的數據引入了數據獲取瀑布。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

這個小變化起初并沒有引起人們注意,卻被被一位細心的前端大牛Dominik發現了發到海外社交媒體上,并表示這可能會顯著降低許多依賴 React 的網站的性能,一時間引起了網友們的鼎沸討論。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

一切都從Dominik發的這條推文開始:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

帖子中指出:React19查詢現在是以瀑布形式運行。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

現在,對于那些不認識 Dominik(又名TkDodo)的人來說,他與傳奇的Tanner Linsley一起是廣泛使用的TanStack Query的核心維護者之一。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

一切都從這條推文開始:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

Dominik(又名TkDodo)何許人?他與傳奇的Tanner Linsley一起是廣泛使用的TanStack Query的核心維護者之一。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

帖子中指出:React19在Suspense處理并行fetching的方式跟React18不一樣了?查詢現在是以瀑布形式運行。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

隨后引起了連鎖反應:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

1.“這是一個令人惱火,不可理解的改動!不僅客戶端組件中也變動了,甚至RSC中的并行fetch也變了。這對react-query而言是一場災難。”enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

2.“可想而知,這也會影響lazily加載的組件(react.lazy)!”enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

3.我能理解Dominik的痛苦:這難道不違背React第一設計原則:compositon嗎?如果我理解正確的話,現在你無法再使用復雜的預取技巧來編寫數據需求。或者你必須將所有數據提取提升到公共父級。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

此次React 19禁用了同一 Suspense 邊界內兄弟節點的并行渲染,這實質上為在這些兄弟節點內部獲取的數據引入了數據獲取瀑布。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

以下是此類事情的一個例子:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

https://github.com/facebook/react/pull/26380#issuecomment-2166178673enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

所有這一切中最糟糕的是,除了性能會有嚴重下降,而且還將影響很多依賴這種模式的人,但只有一行項目符號毫不客氣地提到了這一變化。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

很多人也許納悶:究竟是怎么回事?下面我們就細細道來。enB28資訊網——每日最新資訊28at.com

二、懸疑回顧

為了理解這到底是什么,我們首先需要快速回顧一下 React 的 Suspense。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

Suspense 是一個 React 組件,它允許您顯示一個回退,直到其子組件完成加載,要么是因為這些子組件是延遲加載的,要么是因為它們正在使用啟用 Suspense 的數據獲取機制。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

使用方式如下:enB28資訊網——每日最新資訊28at.com

<Suspense fallback={<Loading />}>  <ComponentThatFetchesDataOrIsLazyLoaded /></Suspense>

盡管 Suspense 已經成為 React API 的一部分很長一段時間了,但是在很長一段時間內,它的唯一官方批準用途是使用來延遲加載組件React.lazy,這對于對應用程序進行代碼分割并僅在需要時加載分割的部分非常有用。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

當與 一起使用時,當第一次嘗試渲染延遲加載的組件時(即,在延遲加載之前),它會觸發 Suspense 邊界(即包裝組件)并渲染回退,直到獲取組件的代碼完成,然后它會渲染組件React.lazySuspense本身。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

長期以來,我們一直被承諾在客戶端上為 Suspense 提供官方數據提取支持(使用 RSC 時,它已經在服務器上運行),但直到現在我們才真正實現它,盡管如此,許多庫(TanStack Query 就是其中之一)已經通過研究 React 的內部結構實現了它。正因為如此,目前生產中有許多應用程序確實使用Suspense在客戶端上進行數據提取。enB28資訊網——每日最新資訊28at.com

三、性能變慢了?

從現在起(React 18.3.1),當在同一個 Suspense 邊界內使用啟用 Suspense 的數據獲取或延遲加載多個組件時,React 會在退出渲染之前嘗試渲染所有兄弟組件,即使第一個兄弟組件已暫停。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

實際上,這意味著這些兄弟節點中發生的數據獲取或延遲加載將全部并行啟動。enB28資訊網——每日最新資訊28at.com

下面是一個展示這個想法的例子:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

function App() {  return (    <>      <Suspense fallback={"Loading..."}>        <ComponentThatFetchesData val={1} />        <ComponentThatFetchesData val={2} />        <ComponentThatFetchesData val={3} />      </Suspense>    </>  );}const ComponentThatFetchesData = ({ val }) => {  const result = fetchSomethingSuspense(val);  return <div>{result}</div>;};

圖片圖片enB28資訊網——每日最新資訊28at.com

演示地址:https://stackblitz.com/edit/vitejs-vite-x3nv7r?file=src%2FApp.jsxenB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

在這個例子中(在 React 18 中),即使fetchSomethingSuspense導致第一個ComponentThatFetchesData暫停,React 仍然會嘗試渲染它的兄弟,這將觸發每個兄弟的并行數據獲取。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

通過查看每次觸發數據提取時記錄的控制臺,可以看出:所有數據獲取幾乎同時開始。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

現在讓我們看看當我們在 React 19(canary)中運行完全相同的代碼時會發生什么:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

演示地址:https://stackblitz.com/edit/vitejs-vite-55rddj?file=src%2FApp.jsxenB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

當我們再次查看控制臺時,我們注意到現在有一個瀑布,因為每個數據提取僅在前一個數據完成后才啟動。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

發生這種情況是因為以下 PR:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

在該 PR 引入更改之后,React 不會嘗試渲染同一 Suspense 邊界內的所有兄弟組件,而是會在第一個掛起的組件上放棄,在這種情況下,您會首先嘗試渲染第一個組件,然后它會掛起,然后只有在其數據獲取完成并且您可以渲染它之后,您才會到達下一個兄弟組件,它將再次掛起,依此類推每個兄弟組件。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

此外,這種新行為不僅會影響使用 Suspense 進行數據提取的使用,還會影響使用React.lazy,因為這是一種舊模式,所以得到了官方支持并且更加廣泛。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

四、背后是什么鬼

這一變化背后的理由(在前面提到的 PR 中寫明)是,在實際暫停之前嘗試渲染所有兄弟節點元素消耗,并且會延遲顯示回退。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

此外,這一變化與React 團隊自 React 18 之前引入 Suspense 以來一直在推動的“獲取時渲染”方法相輔相成。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

理想情況下,我們不應該在使用它的同一組件的渲染上啟動數據提取,而應該將其提升并盡早開始提取數據。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

雖然從性能角度來看這無疑是最好的方法,但它確實帶來了顯著的 DX 缺陷,因為無法共置組件及其數據要求。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

這里不會深入討論這個話題,因為已經有很多人討論了它,甚至有一個專門為解決這個問題而創建的庫,但這里推薦某條特定觀點的推文:enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

這里的主要內容是,如果不使用編譯器,就不可能同時擁有最佳的性能特性以及組件及其數據需求的搭配,而這正是 Relay 所做的。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

五、結局還算圓滿

幸運的是,這個故事有一個圓滿的結局。在經歷了大量公眾反對、激烈討論以及幕后爭論之后,React 團隊最終決定暫時推遲這一改變。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

圖片圖片enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

這并不是社區第一次反對在不考慮 React 在 Meta 和 Vercel 之外的使用方式的情況下引入的更改。React 團隊(尤其是 Vercel)推動將 RSC 成為使用 React 構建的基本組成部分就是一個例子。enB28資訊網——每日最新資訊28at.com

enB28資訊網——每日最新資訊28at.com

很明顯,React 維護者和社區對于 React 的未來前景的看法存在分歧。這些問題溝通會有哪些進展?后續還有待觀察。enB28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-97902-0.html全世界互聯網變慢了!React社區鬧翻天,官方最終讓步!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2024 熱門前端 UI 組件庫超全匯總!

下一篇: 世界上最大的盜版網站,遇到麻煩了!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久视频国产精品免费视频在线| 欧美日韩第一区| 亚洲一区二区免费| 亚洲伊人伊色伊影伊综合网| 午夜影院日韩| 免费欧美网站| 欧美色大人视频| 国产日韩欧美二区| 亚洲国产国产亚洲一二三| 99成人精品| 香蕉成人久久| 欧美第一黄网免费网站| 欧美日韩一区二区国产| 国产午夜精品久久| 91久久黄色| 午夜欧美精品| 欧美成人视屏| 国产精品视频九色porn| 1204国产成人精品视频| 亚洲网友自拍| 老司机免费视频一区二区| 欧美性猛交一区二区三区精品| 国自产拍偷拍福利精品免费一| 999亚洲国产精| 久久九九国产精品| 国产手机视频精品| 亚洲国产精品第一区二区三区| 亚洲一区二区日本| 蜜臀av国产精品久久久久| 国产精品久久国产精品99gif| 影院欧美亚洲| 亚洲欧美日韩在线| 欧美精品成人在线| 黄色成人在线观看| 亚洲欧美日韩中文在线制服| 欧美激情欧美激情在线五月| 国产一区二区三区黄| 一区二区三区成人精品| 免费成人在线视频网站| 国产伦精品一区二区三区四区免费| 亚洲国产另类精品专区| 欧美一区二区三区在线看| 欧美日韩久久不卡| 亚洲电影免费观看高清| 欧美亚洲在线视频| 欧美色视频日本高清在线观看| 永久久久久久| 欧美一区二区在线视频| 欧美四级在线| 亚洲精品在线一区二区| 美女999久久久精品视频| 国产伦精品一区二区三| 妖精成人www高清在线观看| 麻豆成人91精品二区三区| 国产伪娘ts一区| 亚洲欧美日韩爽爽影院| 欧美视频网站| 99综合视频| 欧美精品免费在线| 亚洲国产精品视频一区| 亚洲欧洲在线一区| 久久都是精品| 国产日产欧美a一级在线| 亚洲四色影视在线观看| 欧美另类综合| 亚洲乱亚洲高清| 欧美高清在线观看| 亚洲国产日韩综合一区| 久久一区亚洲| 激情久久综合| 久久久久成人精品| 国产婷婷一区二区| 欧美在线观看视频在线 | 国产精品日本精品| 一区二区三区四区在线| 欧美日韩免费区域视频在线观看| 亚洲区免费影片| 性欧美超级视频| 国产精品资源| 欧美亚洲综合久久| 国产精品有限公司| 午夜精品av| 国产女精品视频网站免费 | 一区二区三区精品视频在线观看| 亚洲国产二区| 久久久久久婷| 好吊妞**欧美| 久久精品99无色码中文字幕| 国产日韩欧美制服另类| 午夜精品福利视频| 国产日本精品| 久久精品二区| 国内精品一区二区三区| 亚洲午夜电影网| 国产精品扒开腿做爽爽爽视频 | 亚洲视频日本| 国产精品露脸自拍| 亚久久调教视频| 国际精品欧美精品| 狂野欧美一区| 亚洲欧洲一区二区三区| 欧美日韩精品伦理作品在线免费观看| 一区二区三区四区国产| 国产精品一区免费视频| 久久精品五月| 亚洲精品1区| 欧美天堂亚洲电影院在线观看| 亚洲欧美日韩第一区| 国产一区二区按摩在线观看| 久久综合伊人77777尤物| 亚洲黄色有码视频| 欧美天堂亚洲电影院在线观看| 欧美一区二区福利在线| 在线观看成人网| 欧美日韩午夜精品| 性久久久久久| 亚洲高清在线播放| 欧美日韩在线综合| 欧美亚洲视频一区二区| 在线观看国产成人av片| 欧美日韩国产黄| 欧美一区二区三区精品| 亚洲福利视频免费观看| 欧美日韩综合网| 久久久久久久97| 日韩小视频在线观看| 国产欧美日韩综合精品二区| 久久欧美肥婆一二区| 夜夜嗨av一区二区三区四区 | 国产精品自拍一区| 另类av一区二区| 在线视频欧美日韩| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 欧美高清在线观看| 亚洲性视频网站| 一区二区三区在线视频播放| 欧美日韩精品欧美日韩精品| 性色一区二区三区| 91久久国产精品91久久性色| 国产精品日产欧美久久久久| 葵司免费一区二区三区四区五区| 亚洲天堂成人在线观看| 在线观看一区二区精品视频| 国产精品激情电影| 乱码第一页成人| 午夜在线观看欧美| 99国产精品久久久久老师| 国内久久视频| 国产精品久久久久久久免费软件| 麻豆精品在线观看| 午夜国产精品视频| 亚洲美女中文字幕| 极品日韩av| 国产精品视频第一区| 欧美精品一区二区三区久久久竹菊 | 日韩一二三在线视频播| 狠狠色2019综合网| 国产精品久久久久久五月尺| 女仆av观看一区| 欧美在线视频观看| 亚洲午夜精品在线| 亚洲人成网在线播放| 黄色一区二区三区| 国产欧美一区二区三区沐欲| 欧美日韩综合久久| 欧美激情综合在线| 美女免费视频一区| 久久精品日韩| 午夜日韩在线观看| 亚洲午夜在线观看| 99精品视频网| 亚洲国产成人精品久久| 国产一区二区丝袜高跟鞋图片 | 国产精品五月天| 欧美三日本三级少妇三2023| 欧美黄色小视频| 免费人成精品欧美精品| 久久久国产一区二区| 欧美一区二区三区在线免费观看| 亚洲一区亚洲| 亚洲网站在线播放| 日韩西西人体444www| 亚洲精品日韩在线观看| 亚洲国产精品成人| 在线激情影院一区| 红杏aⅴ成人免费视频| 极品av少妇一区二区| 韩国一区二区三区在线观看| 国产亚洲欧美日韩精品| 国产热re99久久6国产精品| 国产精品日本一区二区| 国产精品呻吟| 国产区亚洲区欧美区| 国产网站欧美日韩免费精品在线观看 | 欧美黄色成人网| 欧美成人dvd在线视频| 免费视频一区| 欧美成人午夜视频| 欧美激情在线| 欧美三区在线视频| 国产精品久久久久aaaa樱花| 国产精品久久久久婷婷| 国产精品视频在线观看| 国产欧美日韩精品在线|