精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人小视频在线看| 99久热re在线精品996热视频| 国产激情在线免费观看| 成人线上视频| 一区在线播放视频| 国产精品国模大尺度视频| 国产福利精品在线| 多男操一女视频| 欧美日韩大片免费观看| 91成人国产精品| 二级片在线观看| 婷婷丁香一区二区三区| 热久久久久久久| 欧美二区在线播放| 蜜桃传媒一区二区亚洲| 久久国产精品美女| 色八戒一区二区三区| 一区二区三区视频| 午夜国产在线视频| 激情综合亚洲精品| 91高潮精品免费porn| 麻豆精品国产免费| 欧美重口另类| 日韩一级免费观看| 亚洲视频在线a| sqte在线播放| 亚洲欧洲精品一区二区三区| 精品国产一区二区三区免费| 国产乱码一区二区| 丝袜国产日韩另类美女| 欧美激情aaaa| 在线日韩国产网站| 欧美日韩123| 精品国产免费人成在线观看| 亚洲图色中文字幕| 欧美日韩大片| 偷拍一区二区三区| 国产成人一二三区| 国产cdts系列另类在线观看| 久久午夜羞羞影院免费观看| 国产福利久久精品| 国产情侣激情自拍| 另类的小说在线视频另类成人小视频在线 | 亚洲欧美国产高清va在线播| av在线天堂网| 精品国产一区二区三区性色av | 免费成人高清视频| 成熟人妻av无码专区| 外国成人在线视频| 日韩av在线导航| 中文字幕视频观看| 日韩欧美中文字幕在线视频| 欧美老人xxxx18| 杨幂毛片午夜性生毛片 | 成人激情av在线| 天天干天天插天天射| 久久久久国产精品一区三寸| 欧美在线一级视频| 六月丁香激情综合| 久久综合九色综合欧美狠狠| 欧美影院在线播放| 亚洲av无码精品一区二区| 亚洲专区一区| 国产成人精品电影| 亚洲婷婷久久综合| 精品一区二区在线看| 国产日韩在线免费| 97人人爽人人爽人人爽| 国产精品一区二区三区99| 亚洲精品女av网站| 亚洲精品一区二区三区蜜桃| 成人丝袜高跟foot| 久久综合九色综合久99| 日本高清中文字幕二区在线| 国产欧美一区视频| 亚洲一区精彩视频| 在线中文字幕第一页| 亚洲线精品一区二区三区八戒| 免费一级特黄毛片| 日本韩国欧美| 欧美日韩精品一二三区| 天天干天天曰天天操| 都市激情亚洲欧美| 亚洲色图激情小说| 久久爱一区二区| 悠悠资源网久久精品| 国产v综合ⅴ日韩v欧美大片 | 国产精品亚洲综合| 色播色播色播色播色播在线| 欧美经典一区二区| 天天操天天干天天玩| 成人黄色动漫| 欧美群妇大交群的观看方式 | 久久婷婷成人综合色| 视频一区视频二区视频三区视频四区国产| 日本激情视频在线观看| 亚洲一区二区三区不卡国产欧美| 国产精品宾馆在线精品酒店| 国产成人a视频高清在线观看| 日韩一区二区三区精品视频| 给我免费观看片在线电影的| 欧美精品一区二区三区精品| 欧美黑人又粗大| 日日夜夜操视频| 国产精品一区二区三区乱码| 欧美另类一区| 麻豆福利在线观看| 欧美日韩mp4| 超碰97人人干| 国产一区美女| 国产精品一区二区久久久久| 免费观看黄色av| 亚洲国产成人一区二区三区| 无码粉嫩虎白一线天在线观看| 亚洲电影有码| 亚洲国产第一页| www.av成人| 久久久精品网| 精品无人乱码一区二区三区的优势| 日本欧美在线视频免费观看| 狠狠做深爱婷婷久久综合一区| 亚洲一二三av| 国产综合久久久| 7777免费精品视频| www.色日本| 国产精品久久久久久久久免费相片| 久久国产成人精品国产成人亚洲 | 国产伦精品一区二区三区在线| 国产1区2区3区在线| 精品福利免费观看| 99999精品| 青青草综合网| 国产精品第七影院| 色就是色亚洲色图| 午夜激情一区二区| 国产精品99久久久精品无码| 国产精品毛片一区二区在线看| 国产精品久久久久久久久久小说| 五月天激情开心网| 亚洲成人免费看| 人妻巨大乳一二三区| 99久久亚洲精品| 国产日韩精品在线观看| 国产美女性感在线观看懂色av| 精品久久久久久久久中文字幕 | 国产精品丝袜在线播放| 欧美日韩第一视频| 精品国产一级片| 亚洲激情网站免费观看| 亚洲图片 自拍偷拍| 欧美电影免费观看高清| 国产在线播放不卡| 最新av网站在线观看| 在线看日韩精品电影| 欧美激情aaa| 日本成人中文字幕在线视频| 日韩国产欧美一区| 精品123区| 色香阁99久久精品久久久| 在线免费观看一区二区| 国产精品高潮呻吟| 日本一区二区三区在线免费观看| 一区二区中文| 国产一区二区三区色淫影院| 黄色在线免费观看网站| 国产视频欧美视频| 乱子伦一区二区三区| 国产精品天干天干在观线| 欧美女同在线观看| 欧美伊人久久| 国产在线精品一区二区三区》| 中文在线8资源库| 亚洲无限av看| 国产精品视频第一页| 亚洲一区二区三区自拍| 中文乱码人妻一区二区三区视频| 久久久蜜桃一区二区人| 亚洲欧美99| 日本免费一区二区视频| 91精品国产乱码久久久久久蜜臀| 人成在线免费视频| 欧美日韩精品福利| 国产亚洲小视频| 久久无码av三级| 在线观看日本一区二区| 欧美特黄一区| 日韩欧美一区二区在线观看| 国产亚洲高清一区| 91精品国产高清久久久久久| 91在线导航| 精品久久久久久久久久久久包黑料 | youjizz在线播放| 欧美一区二区三区白人| 狠狠躁夜夜躁人人爽天天高潮| 久久久久亚洲蜜桃| 中文字幕乱码在线人视频| 国产一级久久| 精品国产三级a∨在线| 网红女主播少妇精品视频| 国产日韩在线观看av| 极品美鲍一区| 久久精品99国产精品酒店日本| 少妇高潮久久久| 欧美久久高跟鞋激| 欧美国产成人精品一区二区三区| 椎名由奈av一区二区三区| 中出视频在线观看| 国产一区二区美女诱惑| 能在线观看的av网站| 97人人精品| 欧美精品成人一区二区在线观看| 精品中文字幕一区二区三区| 国产成人精品综合| 超碰91在线观看| 美乳少妇欧美精品| 97最新国自产拍视频在线完整在线看| 亚洲激情中文字幕| 99视频免费看| 欧美日韩一级二级三级| 国产精品100| 亚洲成人精品一区二区| 日韩福利小视频| 日本一区二区三区视频视频| 精品国产av色一区二区深夜久久 | 欧美在线看片| 视频一区二区综合| 亚洲综合小说图片| 国产精品免费看一区二区三区| 电影中文字幕一区二区| 国产精品三级在线| 欧美成人精品一区二区男人小说| 亚州成人av在线| 日本大片在线播放| 久久视频免费在线播放| 日韩理伦片在线| 中文字幕亚洲激情| 国产小视频免费在线观看| 日韩精品高清视频| 免费看黄色一级视频| 欧美tickling网站挠脚心| 精品国产av一区二区| 337p亚洲精品色噜噜狠狠| 亚洲专区在线播放| 欧美日韩国产综合一区二区三区| 日韩欧美国产另类| 在线免费一区三区| 老熟妇一区二区三区| 在线精品视频免费观看| 亚洲性猛交富婆| 欧美天天综合网| 中文字幕制服诱惑| 欧美视频中文一区二区三区在线观看| 亚洲中文字幕无码爆乳av| 在线这里只有精品| 国产精品无码粉嫩小泬| 欧美日韩在线综合| 国产麻豆免费视频| 日韩欧美黄色影院| 国产1区在线观看| 日韩成人在线观看| 九色视频网站在线观看| 中文字幕亚洲欧美| 黄色在线免费| 久久久久久久久久久av| 无码小电影在线观看网站免费| 欧美亚洲一级片| av在线日韩| 成人在线中文字幕| 91欧美日韩在线| 久久99精品国产99久久| 视频精品在线观看| 国产精品99久久久久久大便| 亚洲成人影院麻豆| 亚洲欧美在线aaa| 黄色一级片中国| 天天综合色天天| 自拍偷拍18p| 8v天堂国产在线一区二区| xxxx国产精品| 亚洲欧美中文字幕在线一区| 日本综合在线| 国内揄拍国内精品| 亚洲欧美韩国| 国产精品亚洲综合天堂夜夜| 久久在线观看| 欧美日韩国产精品一卡| 日韩欧美视频| www.九色.com| 日韩成人伦理电影在线观看| 亚洲天堂小视频| 久久影院午夜片一区| 中国一级片在线观看| 亚洲成av人片一区二区| 亚洲高清在线看| 日韩免费观看高清完整版 | 国产私拍福利精品视频二区| 成人两性免费视频| 五月综合久久| 黄色小视频大全| 久久久人人人| 91欧美一区二区三区| 久久久久久久久免费| 亚洲av无码一区二区三区在线| 五月激情综合色| 亚洲一区二区天堂| 亚洲精品大尺度| 国产色在线观看| 国产精品av电影| 国产精品jk白丝蜜臀av小说| 亚洲日本精品| 另类图片国产| 黄色性视频网站| 日韩一区中文字幕| 色屁屁影院www国产高清麻豆| 日韩一区二区视频| 99re在线视频| 欧美性资源免费| 大奶在线精品| 女女同性女同一区二区三区按摩| 亚洲欧美日韩国产一区| 亚洲AV成人精品| 成人免费在线视频| 国产一级片免费在线观看| 亚洲成av人片在线观看香蕉| 超碰电影在线播放| 国产日韩av在线播放| 精品久久久亚洲| 欧美在线观看成人| 成人综合在线网站| 九九视频在线免费观看| 7777精品伊人久久久大香线蕉最新版| 国产1区2区3区在线| 日本久久久久久| 特黄特色欧美大片| 欧美最猛性xxxx| 青青草在线免费观看| 日韩有码在线观看| 精品日本视频| 四虎一区二区| 日本最新不卡在线| 我不卡一区二区| 在线观看视频欧美| 国产在线黄色| 欧美一区在线直播| 亚洲欧洲美洲国产香蕉| 少妇性饥渴无码a区免费| av电影一区二区| 日本在线观看中文字幕| 亚洲福利在线播放| wwww亚洲| 精品一区久久久| 午夜亚洲福利在线老司机| 黄色免费看视频| 中文字幕日韩av资源站| 国产又粗又猛又爽又黄视频| 久久精品视频99| 18国产精品| 亚洲熟妇无码一区二区三区| 成人不卡免费av| 国产又色又爽又黄的| 亚洲色图日韩av| 国产精品久久久久久吹潮| 亚洲一卡二卡| 韩国精品一区二区| 国产性70yerg老太| 亚洲精品国产精品乱码不99按摩| heyzo高清在线| 欧美人xxxxx| 久久精品99国产精品| 亚洲综合视频网站| 亚洲成人免费网站| av日韩亚洲| 在线观看成人一级片| 国产剧情一区在线| 久久9999久久免费精品国产| 精品夜色国产国偷在线| 欧美一级二级视频| 一道本在线观看视频| 成人黄色a**站在线观看| 国产成人无码av| www.欧美三级电影.com| www久久久| 国产精品12345| 国产三级精品视频| 朝桐光av在线一区二区三区| 午夜精品福利在线观看| 国产尤物久久久| 韩国三级hd中文字幕有哪些| 欧美午夜精品伦理| 毛片在线看网站| 精品九九九九| 精品一区二区三区影院在线午夜 | 亚洲精品午夜av福利久久蜜桃| av漫画在线观看| 在线观看免费成人| 免费网站在线观看人| 日韩精品一区二区三区外面| 国产精品99久久久久久宅男| 69亚洲精品久久久蜜桃小说 | 97人人在线视频|