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

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

苦等三年,React Compiler 終于能用了。使用體驗:很爽,但仍有瑕疵

來源: 責編: 時間:2024-06-17 17:40:15 233觀看
導讀一、React CompilerReact Compiler 終于開源了。自從從它第一次在 React Conf 2021 亮相。到現(xiàn)在 React Conf 2024 正式開源,我已經苦等了三年之久。盼星星盼月亮,終于把他給盼來了。i以前叫 React Forget,現(xiàn)改名為 Reac

一、React Compiler

React Compiler 終于開源了。WFl28資訊網——每日最新資訊28at.com

自從從它第一次在 React Conf 2021 亮相。到現(xiàn)在 React Conf 2024 正式開源,我已經苦等了三年之久。盼星星盼月亮,終于把他給盼來了。WFl28資訊網——每日最新資訊28at.com

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

以前叫 React Forget,現(xiàn)改名為 React Compiler。WFl28資訊網——每日最新資訊28at.com

要了解 React Compiler,這還需要從 React 的更新機制說起。React 項目中的任何一個組件發(fā)生 state 狀態(tài)的變更,React 更新機制都會從最頂層的根節(jié)點開始往下遞歸對比,通過雙緩存機制判斷出哪些節(jié)點發(fā)生了變化,然后更新節(jié)點。這樣的更新機制成本并不小,因為在判斷過程中,如果 React 發(fā)現(xiàn) props、state、context 任意一個不同,那么就認為該節(jié)點被更新了。因此,冗余的 re-render 在這個過程中會大量發(fā)生。WFl28資訊網——每日最新資訊28at.com

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

對比的成本非常小,但是 re-render 的成本偏高,當我們在短時間之內快速更改 state 時,程序大概率會存在性能問題。因此在以往的開發(fā)方式中,掌握性能優(yōu)化的手段是高級 React 開發(fā)者的必備能力。WFl28資訊網——每日最新資訊28at.com

一個組件節(jié)點在 React 中很難被判斷為沒有發(fā)生過更新。因為 props 的比較總是不同的。它的比較方式如下。WFl28資訊網——每日最新資訊28at.com

{} === {} // false

因此,高級 React 開發(fā)者需要非常了解 React 的默認優(yōu)化機制,讓 props 的比較不發(fā)生,因為一旦發(fā)生,那么結果必定是 false。WFl28資訊網——每日最新資訊28at.com

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

事實上,對 React 默認優(yōu)化機制了解的開發(fā)者非常少,我們在開發(fā)過程中也不會為了優(yōu)化這個性能去重新調整組件的分布。更多的還是使用 memo 與 useMemo/useCallback 暴力緩存節(jié)點。WFl28資訊網——每日最新資訊28at.com

在這樣的背景之下,冗余的 re-render 在大量的項目中發(fā)生。這也是為什么 React 總是唄吐槽性能不好的主要原因。當然,大多數(shù)項目并沒有頻繁更新 state 的需求,因此這一點性能問題表現(xiàn)得并不是很明顯。WFl28資訊網——每日最新資訊28at.com

如果我們要解決冗余 re-render 的問題,需要對 React 默認優(yōu)化技能有非常深刻的理解,需要對 memo、useCallback、useMemo 有準確的理解。但是普通的 React 開發(fā)者很難理解他們,有的開發(fā)者雖然在項目中大量使用了,但是未必就達到了理想的效果。React Compiler 則是為了解決這個問題,它可以自動幫助我們記憶已經存在、并且沒有發(fā)生更新的組件,從而解決組件冗余 re-render 的問題。WFl28資訊網——每日最新資訊28at.com

從使用結果的體驗來看,React Compiler 被集成在代碼自動編譯中,因此只要我們在項目中引入成功,就不再需要關注它的存在。我們的開發(fā)方式不會發(fā)生任何改變。它不會更改 React 現(xiàn)有的開發(fā)范式和更新方式,侵入性非常弱。WFl28資訊網——每日最新資訊28at.com

二、檢測

并非所有的組件都能被優(yōu)化。因此早在 React 18 的版本中,React 官方團隊就提前發(fā)布了嚴格模式。在頂層根節(jié)點中,套一層 StrictMode 即可。WFl28資訊網——每日最新資訊28at.com

<StrictMode>  <BrowserRouter>    <App />  </BrowserRouter></StrictMode>

遵循嚴格模式的規(guī)范,我們的組件更容易符合 React Compiler 的優(yōu)化規(guī)則。WFl28資訊網——每日最新資訊28at.com

我們可以使用如下方式首先檢測代碼庫是否兼容。在項目根目錄下執(zhí)行如下指令。WFl28資訊網——每日最新資訊28at.com

npx react-compiler-healthcheck

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

該腳本主要用于檢測。WFl28資訊網——每日最新資訊28at.com

1、項目中有多少組件可以成功優(yōu)化:越多越好。WFl28資訊網——每日最新資訊28at.com

2、是否使用嚴格模式,使用了優(yōu)化成功率更高。WFl28資訊網——每日最新資訊28at.com

3、是否使用了與 Compiler 不兼容的三方庫。WFl28資訊網——每日最新資訊28at.com

例如,我的其中一個項目,檢測結果如下:WFl28資訊網——每日最新資訊28at.com

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

很棒。WFl28資訊網——每日最新資訊28at.com

這里需要注意的是,引入了 Compiler 插件之后,它會自動工作,我們完全不用關注它的存在。因此,如果程序不出問題,對于開發(fā)者來說,編譯工作是無感的。所以開發(fā)體驗非常棒。WFl28資訊網——每日最新資訊28at.com

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

不過有一些美中不足的是,當我嘗試驗證其他已經寫好的組件被編譯之后是否存在問題時,發(fā)現(xiàn)有一個組件的運行邏輯發(fā)生了變化。目前我還沒有深究具體是什么原因導致的,不過通過對比,這個組件的獨特之處在與,我在該組件中使用了 useDeferredValue 來處理異步請求。WFl28資訊網——每日最新資訊28at.com

另外,Compiler 也不能阻止 context 組件的 re-render。例如我在一個組件中使用了 use(context) ,哪怕我并沒有使用具體的值。如下所示。WFl28資訊網——每日最新資訊28at.com

import {use} from 'react'import {Context} from './context'export default function Card() {  const value = use(Context)  console.log('xxxxx context')  return (    <>      <div className='_06_card'>        <div className="title">Canary</div>        <p>The test page</p>      </div>    </>  )}

理想情況是這種情況可以不用發(fā)生 re-render。因此總體來說,Compiler 目前確實還不能完全信任。也有可能我還沒掌握正確的姿勢,還需要對他有更進一步的了解才可以。WFl28資訊網——每日最新資訊28at.com

不過值得高興的是,新項目可以放心使用 Compiler,因為運行結果我們都能實時感知、調試、調整,能最大程度的避免問題的出現(xiàn)。WFl28資訊網——每日最新資訊28at.com

五、原理

React Compiler 編譯之后的代碼并非是在合適的時機使用 useMemo/memo 等 API 來緩存組件。而是使用了一個名為 useMemoCache 的 hook 來緩存代碼片段。WFl28資訊網——每日最新資訊28at.com

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

Compiler 會分析所有可能存在的返回結果,并把每個返回結果都存儲在 useMemoCache 中。如上圖所示,他打破了原有的鏈表存儲結果,而選擇把緩存結構存儲在數(shù)組上。因此在執(zhí)行效率上,Compiler 之后的代碼會高不少。每一個渲染結果都會被存儲在 useMemoCache 的某一項中,如果判斷之后發(fā)現(xiàn)該結果可以復用,則直接通過讀取序列的方式使用即可。如圖所示。WFl28資訊網——每日最新資訊28at.com

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

因此,編譯之后的代碼看上去會更加的繁雜。但是執(zhí)行卻會更加高效。WFl28資訊網——每日最新資訊28at.com

六、總結

初次感受下來,雖然感覺還不錯。但是依然會有一種自己寫的代碼被魔改的不適感。特別是遇到問題的時候,還不知道到底編譯器干了什么事情讓最終運行結果與預想的完全不同。WFl28資訊網——每日最新資訊28at.com

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

這也是我不太喜歡使用 Solid 與 Svelte 的根本原因。不過 React 好在可以不用...WFl28資訊網——每日最新資訊28at.com

但是從執(zhí)行性能上確實會有大的提高,這一點對于初學者可能會比較友好。WFl28資訊網——每日最新資訊28at.com

目前,由于接觸時間太短,我對于 React Compiler 的使用體驗還停留在比較淺的層面。因此能聊的東西并不多,在后續(xù)我有了更進一步更深刻的體會之后,再來跟大家分享體驗結果。WFl28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-94294-0.html苦等三年,React Compiler 終于能用了。使用體驗:很爽,但仍有瑕疵

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

上一篇: Gopher的Rust第一課:建立Rust開發(fā)環(huán)境

下一篇: 超火超實用的 10 個前端工具庫,可能就是你一直在尋找的!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品社区| 欧美视频在线观看免费| 久久国产成人| 久久久亚洲影院你懂的| 欧美高清在线精品一区| 欧美日韩一区在线| 国产欧美日韩免费看aⅴ视频| 国内精品久久久久影院色| 亚洲福利在线观看| 亚洲免费观看| 欧美一区二区三区免费看| 美女久久一区| 国产精品草草| 国内精品美女av在线播放| 亚洲日本va午夜在线影院| 亚洲一区国产精品| 久久综合九色| 国产精品大片wwwwww| 国外成人在线视频网站| 亚洲精品在线观看免费| 亚洲一区二区少妇| 免费久久精品视频| 国产美女诱惑一区二区| 亚洲激情视频网站| 香蕉乱码成人久久天堂爱免费| 美女图片一区二区| 国产精品蜜臀在线观看| 亚洲黄色视屏| 久久高清国产| 欧美天天视频| 亚洲国产日韩欧美一区二区三区| 午夜视频久久久| 欧美精品一区二区久久婷婷| 国产亚洲二区| 亚洲视频一二| 欧美va天堂在线| 国产一区二区| 亚洲午夜羞羞片| 欧美风情在线观看| 国产午夜亚洲精品羞羞网站| 99这里只有精品| 猛男gaygay欧美视频| 国产麻豆精品在线观看| 99国产精品99久久久久久粉嫩| 久久精品一区二区| 国产精品美女在线| 在线视频欧美精品| 欧美国产1区2区| 黄色一区二区三区| 欧美一区二区三区四区夜夜大片| 欧美日韩视频专区在线播放| 亚洲第一在线| 久久久久久色| 国产一区欧美| 欧美一级网站| 国产精品免费一区豆花| 99精品免费| 欧美国产先锋| 亚洲国产第一| 久久嫩草精品久久久精品一| 国产日韩av一区二区| 亚洲一区免费网站| 欧美日韩伊人| 日韩视频中文字幕| 欧美精品一区二区三区视频| 在线日韩中文字幕| 久久免费偷拍视频| 精品二区视频| 久久人人爽人人| 国内精品久久久久久久97牛牛| 亚洲欧美大片| 国产精品欧美风情| 亚洲一区久久久| 国产精品国产三级国产aⅴ无密码| 欧美三级乱码| 亚洲人成网站777色婷婷| 美国成人直播| 136国产福利精品导航网址| 久久久久女教师免费一区| 国产亚洲欧美一区二区三区| 欧美伊人久久久久久久久影院| 国产精品亚洲人在线观看| 亚洲一区二区在线免费观看视频| 国产精品久久久久永久免费观看 | 99精品国产热久久91蜜凸| 欧美激情影院| 99精品国产高清一区二区| 欧美日韩国产欧| 中国女人久久久| 国产精品女主播| 欧美亚洲午夜视频在线观看| 国产视频在线观看一区二区| 久久精品亚洲| 亚洲大片在线观看| 欧美韩日高清| 中文国产亚洲喷潮| 国产精品一区二区黑丝| 久久精品成人一区二区三区蜜臀 | 卡一卡二国产精品| 亚洲欧洲一区| 欧美日韩在线综合| 午夜在线精品| 精品88久久久久88久久久| 免费成人高清视频| 夜夜爽www精品| 国产麻豆综合| 久久尤物视频| 99精品热视频| 国产欧美精品一区二区三区介绍| 久久久久久久久一区二区| 亚洲国产专区| 国产精品久久久久国产精品日日| 欧美在线视频二区| 亚洲国产综合91精品麻豆| 欧美日韩视频在线一区二区| 午夜视频久久久| 亚洲国产精品999| 欧美新色视频| 久久久久久久精| 一本久久青青| 国产视频久久| 欧美国产成人精品| 亚洲欧美日韩另类| 在线观看日韩av电影| 欧美视频手机在线| 久久久久久欧美| 一卡二卡3卡四卡高清精品视频| 国产欧美日韩三级| 欧美成人午夜免费视在线看片| 亚洲天堂网在线观看| 在线观看的日韩av| 国产精品国产三级国产普通话三级| 久久精品成人一区二区三区 | 麻豆久久精品| 美玉足脚交一区二区三区图片| 欧美日韩在线观看视频| 国产精品99免费看 | 亚洲精品美女在线| 亚洲深夜福利视频| 亚洲免费影视第一页| 国产精品护士白丝一区av| 一区二区三区你懂的| 国产欧美一区二区三区国产幕精品 | 国产一在线精品一区在线观看| 国产精品久久久久久久久久直播 | 亚洲一区国产视频| 美女脱光内衣内裤视频久久网站| 狠狠色综合一区二区| 久久视频免费观看| 国产精品初高中精品久久| 久久久久看片| av成人免费观看| 欧美国产综合一区二区| 亚洲日韩中文字幕在线播放| 欧美激情一二三区| 亚洲成在人线av| 久久综合999| 亚洲综合首页| 亚洲国内自拍| 韩国视频理论视频久久| 欧美日韩一级黄| 欧美福利视频在线观看| 久久成人精品无人区| 亚洲视频电影图片偷拍一区| 国产精品视频内| 午夜精品偷拍| 在线观看一区二区精品视频| 欧美精品一区二区在线播放| 亚洲欧美激情一区二区| 在线观看亚洲视频啊啊啊啊| 欧美日韩亚洲综合一区| 久久久久久久97| 一区二区三区视频免费在线观看| 国产乱码精品一区二区三区五月婷 | 欧美在线网站| 中文一区二区| 亚洲精品在线三区| 亚洲福利视频专区| 国内精品久久久久国产盗摄免费观看完整版 | 日韩亚洲不卡在线| 亚洲第一搞黄网站| 国内精品嫩模av私拍在线观看 | 国产日韩专区| 国产女人水真多18毛片18精品视频| 欧美三区不卡| 欧美日韩国产成人高清视频| 欧美大尺度在线观看| 麻豆精品视频在线观看视频| 久久久久中文| 久久久精品日韩欧美| 欧美综合第一页| 久久aⅴ国产欧美74aaa| 欧美一级在线视频| 欧美一级视频免费在线观看| 亚洲欧美综合精品久久成人 | 欧美日韩国产一区| 欧美激情一区二区三区在线视频观看 | 蜜臀av国产精品久久久久| 久久免费99精品久久久久久| 久久久999精品免费| 久久精品最新地址| 久久免费视频网| 欧美凹凸一区二区三区视频| 欧美成人a视频|