精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:說說對React Fiber架構的理解?解決了什么問題?

開發 前端
JavaScript引擎和頁面渲染引擎兩個線程是互斥的,當其中一個線程執行時,另一個線程只能掛起等待。

[[413974]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。

一、問題

JavaScript引擎和頁面渲染引擎兩個線程是互斥的,當其中一個線程執行時,另一個線程只能掛起等待

如果 JavaScript 線程長時間地占用了主線程,那么渲染層面的更新就不得不長時間地等待,界面長時間不更新,會導致頁面響應度變差,用戶可能會感覺到卡頓

而這也正是 React 15 的 Stack Reconciler所面臨的問題,當 React在渲染組件時,從開始到渲染完成整個過程是一氣呵成的,無法中斷

如果組件較大,那么js線程會一直執行,然后等到整棵VDOM樹計算完成后,才會交給渲染的線程

這就會導致一些用戶交互、動畫等任務無法立即得到處理,導致卡頓的情況

二、是什么

React Fiber 是 Facebook 花費兩年余時間對 React 做出的一個重大改變與優化,是對 React 核心算法的一次重新實現。從Facebook在 React Conf 2017 會議上確認,React Fiber 在React 16 版本發布

在react中,主要做了以下的操作:

  • 為每個增加了優先級,優先級高的任務可以中斷低優先級的任務。然后再重新,注意是重新執行優先級低的任務
  • 增加了異步任務,調用requestIdleCallback api,瀏覽器空閑的時候執行
  • dom diff樹變成了鏈表,一個dom對應兩個fiber(一個鏈表),對應兩個隊列,這都是為找到被中斷的任務,重新執行

從架構角度來看,Fiber 是對 React核心算法(即調和過程)的重寫

從編碼角度來看,Fiber是 React內部所定義的一種數據結構,它是 Fiber樹結構的節點單位,也就是 React 16 新架構下的虛擬DOM

一個 fiber就是一個 JavaScript對象,包含了元素的信息、該元素的更新操作隊列、類型,其數據結構如下:

  1. type Fiber = { 
  2.   // 用于標記fiber的WorkTag類型,主要表示當前fiber代表的組件類型如FunctionComponent、ClassComponent等 
  3.   tag: WorkTag, 
  4.   // ReactElement里面的key 
  5.   keynull | string, 
  6.   // ReactElement.type,調用`createElement`的第一個參數 
  7.   elementType: any
  8.   // The resolved function/class/ associated with this fiber. 
  9.   // 表示當前代表的節點類型 
  10.   type: any
  11.   // 表示當前FiberNode對應的element組件實例 
  12.   stateNode: any
  13.  
  14.   // 指向他在Fiber節點樹中的`parent`,用來在處理完這個節點之后向上返回 
  15.   return: Fiber | null
  16.   // 指向自己的第一個子節點 
  17.   child: Fiber | null
  18.   // 指向自己的兄弟結構,兄弟節點的return指向同一個父節點 
  19.   sibling: Fiber | null
  20.   index: number, 
  21.  
  22.   ref: null | (((handle: mixed) => void) & { _stringRef: ?string }) | RefObject, 
  23.  
  24.   // 當前處理過程中的組件props對象 
  25.   pendingProps: any
  26.   // 上一次渲染完成之后的props 
  27.   memoizedProps: any
  28.  
  29.   // 該Fiber對應的組件產生的Update會存放在這個隊列里面 
  30.   updateQueue: UpdateQueue<any> | null
  31.  
  32.   // 上一次渲染的時候的state 
  33.   memoizedState: any
  34.  
  35.   // 一個列表,存放這個Fiber依賴的context 
  36.   firstContextDependency: ContextDependency<mixed> | null
  37.  
  38.   mode: TypeOfMode, 
  39.  
  40.   // Effect 
  41.   // 用來記錄Side Effect 
  42.   effectTag: SideEffectTag, 
  43.  
  44.   // 單鏈表用來快速查找下一個side effect 
  45.   nextEffect: Fiber | null
  46.  
  47.   // 子樹中第一個side effect 
  48.   firstEffect: Fiber | null
  49.   // 子樹中最后一個side effect 
  50.   lastEffect: Fiber | null
  51.  
  52.   // 代表任務在未來的哪個時間點應該被完成,之后版本改名為 lanes 
  53.   expirationTime: ExpirationTime, 
  54.  
  55.   // 快速確定子樹中是否有不在等待的變化 
  56.   childExpirationTime: ExpirationTime, 
  57.  
  58.   // fiber的版本池,即記錄fiber更新過程,便于恢復 
  59.   alternate: Fiber | null

三、如何解決

Fiber把渲染更新過程拆分成多個子任務,每次只做一小部分,做完看是否還有剩余時間,如果有繼續下一個任務;如果沒有,掛起當前任務,將時間控制權交給主線程,等主線程不忙的時候在繼續執行

即可以中斷與恢復,恢復后也可以復用之前的中間狀態,并給不同的任務賦予不同的優先級,其中每個任務更新單元為 React Element 對應的 Fiber節點

實現的上述方式的是requestIdleCallback方法

window.requestIdleCallback()方法將在瀏覽器的空閑時段內調用的函數排隊。這使開發者能夠在主事件循環上執行后臺和低優先級工作,而不會影響延遲關鍵事件,如動畫和輸入響應

首先 React 中任務切割為多個步驟,分批完成。在完成一部分任務之后,將控制權交回給瀏覽器,讓瀏覽器有時間再進行頁面的渲染。等瀏覽器忙完之后有剩余時間,再繼續之前 React 未完成的任務,是一種合作式調度。

該實現過程是基于 Fiber節點實現,作為靜態的數據結構來說,每個 Fiber 節點對應一個 React element,保存了該組件的類型(函數組件/類組件/原生組件等等)、對應的 DOM 節點等信息。

作為動態的工作單元來說,每個 Fiber 節點保存了本次更新中該組件改變的狀態、要執行的工作。

每個 Fiber 節點有個對應的 React element,多個 Fiber節點根據如下三個屬性構建一顆樹:

  1. // 指向父級Fiber節點 
  2. this.return = null 
  3. // 指向子Fiber節點 
  4. this.child = null 
  5. // 指向右邊第一個兄弟Fiber節點 
  6. this.sibling = null 

通過這些屬性就能找到下一個執行目標

參考文獻

https://juejin.cn/post/6926432527980691470

https://zhuanlan.zhihu.com/p/137234573

 

https://vue3js.cn/interview

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-07-13 07:52:03

ReactHooks組件

2021-06-30 07:19:36

React事件機制

2021-07-07 08:36:45

React應用場景

2021-05-31 10:35:34

TCPWebSocket協議

2021-07-12 08:35:24

組件應用場景

2021-07-08 06:51:29

React函數組件

2025-03-11 09:19:53

2021-06-08 08:33:23

NodeStream數據

2021-06-07 09:41:48

NodeBuffer 網絡協議

2021-06-10 07:51:07

Node.js循環機制

2021-09-13 09:23:52

TypeScript命名空間

2021-06-03 08:14:01

NodeProcessJavaScript

2021-10-29 09:40:21

設計模式軟件

2021-06-04 07:55:30

Node Fs 操作

2020-08-03 07:38:12

單例模式

2021-11-25 10:18:42

RESTfulJava互聯網

2021-08-09 07:47:40

Git面試版本

2021-06-15 10:01:02

應用系統軟件

2021-06-29 09:47:34

ReactSetState機制

2021-07-19 07:55:24

Redux中間件原理
點贊
收藏

51CTO技術棧公眾號

亚洲国产日韩在线一区| 一区二区三区|亚洲午夜| 麻豆视频在线观看| 噜噜噜狠狠夜夜躁精品仙踪林| 亚洲第一福利一区| 欧美美乳视频网站在线观看| 中文字幕久久网| 91精品国产成人观看| 精品国产青草久久久久福利| 日韩欧美xxxx| 26uuu亚洲电影在线观看| 成人动漫在线一区| 国产精品美女免费| 久久成人国产精品入口| 久久99高清| 日韩你懂的在线观看| 国产男女激情视频| 在线看三级电影| 国产日韩欧美精品综合| 国产精品自产拍在线观| 国产无套粉嫩白浆内谢| 欧美一区电影| 亚洲精品ady| а 天堂 在线| 欧美三级网址| 亚洲成a人v欧美综合天堂下载| 日韩欧美一区二区视频在线播放 | 91精品婷婷色在线观看| 亚洲精品视频播放| 日本黄色大片在线观看| 美女色狠狠久久| 日韩欧美中文第一页| www国产无套内射com| av影片在线看| 久久精品欧美日韩| 久久精品国产理论片免费| 国产麻豆精品一区| 蜜桃久久久久久久| 日本久久亚洲电影| 日韩欧美大片在线观看| 欧美69wwwcom| 久热99视频在线观看| 中文字幕伦理片| 亚洲69av| 日韩精品有码在线观看| 少妇伦子伦精品无吗| 精品视频一区二区三区| 欧美亚一区二区| 国产成人a亚洲精v品无码| av中文资源在线资源免费观看| 亚洲乱码国产乱码精品精可以看| 亚洲欧美综合一区| 国产精品毛片一区二区三区四区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产欧美韩日| 五月婷婷六月激情| 99久久精品国产导航| 韩国成人一区| 天堂在线一二区| a美女胸又www黄视频久久| 国产精品中出一区二区三区| 蜜桃av噜噜一区二区三区麻豆| 国产经典欧美精品| 国产不卡一区二区在线观看| 午夜精品一区二区三| 国产精品香蕉一区二区三区| 99在线高清视频在线播放| 成人精品在线播放| 91在线码无精品| 欧美久久电影| 在线观看麻豆| 亚洲男女毛片无遮挡| 日本国产中文字幕| 1区2区3区在线| 精品久久在线播放| 热久久精品免费视频| 蜜桃视频成人m3u8| 欧美日韩激情在线| 亚洲精品无码久久久久久久| silk一区二区三区精品视频 | 一区二区三区高清在线| 女人色极品影院| 美女高潮在线观看| 欧美亚州韩日在线看免费版国语版| www.com久久久| 北条麻妃一区二区三区在线观看| 亚洲精品资源在线| 自拍偷拍第9页| 1024日韩| 国产精品美女网站| 国产肥老妇视频| 99re成人精品视频| 亚洲黄色一区二区三区| av黄在线观看| 欧美午夜片在线免费观看| 欧美成人黄色网址| 一区二区三区四区精品视频 | 国产免费一区视频观看免费| 97视频免费在线| 99久精品国产| 亚洲巨乳在线观看| a级片免费在线观看| 色噜噜偷拍精品综合在线| 涩多多在线观看| 欧美成人午夜77777| 中文字幕精品在线视频| 国产亚洲自拍av| 日韩av不卡在线观看| 亚洲一区亚洲二区亚洲三区| 三级在线电影| 亚洲精品你懂的| 欧美三级一级片| 日韩一区二区三区高清在线观看| 亚洲精品视频二区| 久久久久久国产精品视频| 视频在线观看一区二区三区| av成人在线电影| 91短视频版在线观看www免费| 亚洲永久精品国产| 污网站在线免费| 亚洲8888| 97久久精品人搡人人玩| 国产一区二区麻豆| 国产日韩欧美a| 精品久久久久久久久久中文字幕| 深夜日韩欧美| 亚洲小视频在线观看| 精品一区二区三区四| 精品在线视频一区| 欧美在线激情| 午夜伦理福利在线| 日韩精品资源二区在线| 日本成人免费在线观看| 玖玖在线精品| 精品一区二区久久久久久久网站| 3d玉蒲团在线观看| 7799精品视频| 国产第一页浮力| 蜜臀va亚洲va欧美va天堂| 欧洲一区二区日韩在线视频观看免费 | 国产乱国产乱300精品| 欧美一区2区三区4区公司二百| 91超碰在线| 精品va天堂亚洲国产| 99久久婷婷国产综合| 久久99精品国产麻豆婷婷| 日本午夜一区二区三区| 亚洲综合在线电影| 亚洲人成免费电影| 波多野结衣大片| 国产日本亚洲高清| 毛片av免费在线观看| 自拍自偷一区二区三区| 2020欧美日韩在线视频| 婷婷伊人综合中文字幕| 午夜国产不卡在线观看视频| 在线xxxxx| 亚洲深夜激情| 久久五月天婷婷| 少妇一区视频| 在线日韩第一页| 亚洲一区二区色| 亚洲青青青在线视频| 三级黄色片播放| 黄色国产精品| 久久99国产精品99久久| 欧美天堂视频| 日韩在线观看免费网站| 97超碰国产在线| 亚洲最新在线观看| 星空大象在线观看免费播放| 国产精品婷婷| 日韩免费一区二区三区| 色成人综合网| 欧美激情视频网| 偷拍自拍在线| 欧美视频完全免费看| 亚洲一级二级片| 成人一级黄色片| 成人一级片网站| 日韩综合在线| 春色成人在线视频| 欧美黑人疯狂性受xxxxx野外| 国产一区二区日韩精品欧美精品| 国产精品国产一区二区三区四区| 亚洲一区二区三区四区中文字幕| 国产白嫩美女无套久久| 美女mm1313爽爽久久久蜜臀| 女人床在线观看| 亚洲人成网亚洲欧洲无码| 国产精品亚发布| 都市激情久久综合| 伊人久久精品视频| 成人激情四射网| 欧美一a一片一级一片| 青青草在线观看视频| 久久综合九色综合欧美98 | 国产成人亚洲精品青草天美 | av色在线观看| 亚洲夜晚福利在线观看| 国产av一区二区三区精品| 午夜久久久久久久久久一区二区| 老头老太做爰xxx视频| 国产成人午夜精品影院观看视频| caopor在线视频| 欧美精品一卡| 亚洲欧洲一区二区福利| 精品国产一区二区三区不卡蜜臂| 国产精品影片在线观看| 国产高清视频色在线www| 日韩中文字幕国产| 日产精品久久久久久久性色| 欧美一区二区免费| 这里只有久久精品视频| 亚洲成a人片在线不卡一二三区 | 奇米777在线| 久久精品中文| www污在线观看| 久久亚洲成人| 麻豆传媒一区| 国产91精品入| 亚洲一区二区在线| jizzjizz少妇亚洲水多| 青青a在线精品免费观看| 伊人222成人综合网| 中文字幕日韩欧美| 精品视频二区| 亚洲国产免费av| 精品二区在线观看| 欧美高清性hdvideosex| 波多野结衣电车痴汉| 日韩欧中文字幕| 天堂网一区二区三区| 亚洲午夜免费电影| 九九热精品在线观看| 中文字幕一区二区三区四区不卡| a级在线免费观看| 91蝌蚪porny九色| av鲁丝一区鲁丝二区鲁丝三区| 国产盗摄视频一区二区三区| 国产一区二区在线观看免费视频| 日本aⅴ免费视频一区二区三区| 欧美一区二区三区爽大粗免费| 伊人久久成人| 99在线精品免费视频| 国产精品草草| 国产免费裸体视频| 国模大胆一区二区三区| 粉嫩av一区二区三区天美传媒 | 销魂美女一区二区| 日韩欧美亚洲综合| 九九精品免费视频| 欧美午夜视频在线观看| 丰满人妻老熟妇伦人精品| 精品国产老师黑色丝袜高跟鞋| 日本天堂在线视频| 日韩欧美高清在线视频| 日韩精品1区2区| 色偷偷久久人人79超碰人人澡| 黄色片网站在线免费观看| 色综合久久综合网欧美综合网| 日本久久综合网| 在线一区二区观看| 亚洲香蕉在线视频| 777亚洲妇女| 欧美视频一二区| 日韩精品电影网| 免费在线毛片| 日韩中文字幕在线免费观看| av免费在线免费| 午夜精品在线视频| 欧美成a人片在线观看久| 国产精品视频在线观看| 国产一区二区| 国内精品视频在线播放| 视频一区欧美| 青少年xxxxx性开放hg| 欧美激情在线| av免费中文字幕| 精品在线你懂的| 白嫩情侣偷拍呻吟刺激| 久久精品综合网| 成人在线观看高清| 亚洲国产sm捆绑调教视频| 精品国产免费观看| 欧美日韩免费在线视频| 99在线观看免费| 亚洲精品视频免费在线观看| 99视频在线观看地址| 欧美国产视频一区二区| 成人欧美大片| 1卡2卡3卡精品视频| 秋霞影视一区二区三区| 亚洲综合首页| 亚洲激情黄色| 特黄视频免费观看| 91丨九色porny丨蝌蚪| 999精品视频在线观看播放| 午夜精品福利久久久| 最新国产中文字幕| 亚洲精品久久久久国产| 日本在线www| 国产91精品久久久久久久| 日韩av黄色| 欧美大陆一区二区| 欧美精品99| 亚洲欧美自拍另类日韩| 99久精品国产| 日韩黄色影片| 在线免费观看不卡av| 国产免费不卡av| 亚洲免费av网址| 亚洲第一图区| 国产精品嫩草视频| 一区二区三区自拍视频| 日韩精品一区二区三区丰满| 在线看片欧美| 91精品999| 国产三级一区二区| 亚洲国产精品成人无久久精品| 欧美男生操女生| 噜噜噜在线观看播放视频| 欧美日本高清一区| 精品福利在线| 欧美成人在线免费观看| 亚洲国产欧美国产综合一区| 色91精品久久久久久久久| 国产无一区二区| 黄色片视频网站| 日韩视频在线一区二区| 网友自拍视频在线| 国产精品成人在线| 日韩av中文字幕一区| 成年人深夜视频| 国产伦精一区二区三区| 中文字幕资源站| 欧美专区亚洲专区| 国产大学生校花援交在线播放 | 三级黄色在线观看| 在线观看亚洲一区| 精品推荐蜜桃传媒| 欧美性视频精品| 婷婷精品在线观看| 国产资源在线视频| 99热国产精品| 日韩av电影网| 亚洲电影免费观看| 肉体视频在线| 成人激情av| 亚洲第一黄网| av在线播放网址| 欧美视频一区二区三区…| 少妇又色又爽又黄的视频| 国内外成人免费激情在线视频 | 精品国产乱码久久久久久老虎| 午夜小视频福利在线观看| 91福利视频导航| 黄色成人在线网站| 亚洲成av人片在线观看无| 性欧美大战久久久久久久久| 天天舔天天干天天操| 欧美专区日韩视频| 精品国产乱码久久久久久蜜坠欲下| 超碰网在线观看| 欧美激情一区三区| 一起草av在线| 久久99国产综合精品女同| 国产精品视屏| 亚洲爆乳无码专区| 国产精品久久久久久久久免费相片| 97精品人妻一区二区三区香蕉| 欧美成人精品一区| 澳门久久精品| 国产成人手机视频| 亚洲欧美日韩电影| 欧美特级特黄aaaaaa在线看| 45www国产精品网站| 国产精品嫩草影院在线看| 亚洲综合欧美激情| 伊人婷婷欧美激情| 亚洲色图欧美视频| 国产精品爽爽爽| 欧美日韩p片| www.自拍偷拍| 正在播放亚洲一区| 啊啊啊久久久| 在线视频91| 99久久伊人精品| 亚洲图片视频小说| 欧美日本国产在线| 九九热爱视频精品视频| 亚洲综合伊人久久| 偷拍与自拍一区| 日韩欧美小视频| 久久大香伊蕉在人线观看热2| 三级不卡在线观看| 久久精品99国产精| 亚洲欧美日韩在线一区| 日韩av综合| 青青草av网站|