react中虛擬dom,diff,fiber - 初級了解

借鑒:

「React深入」一文吃透虛擬DOM和diff算法 - 掘金 (juejin.cn)

虛擬dom、fiber、渲染dom、dom-diff - 掘金 (juejin.cn)

未閱讀源碼,了解層面,后續可以深入了解

1.虛擬DOM

①.結構上:虛擬DOM比真實DOM輕很多

②.操作上:虛擬DOM比真實DOM性能高

③.流程上:一個頁面如果有500次變化,沒有虛擬DOM的就會渲染500次,而虛擬DOM只需要渲染一次,從這點上來看,頁面越復雜,虛擬DOM的優勢越大

2.虛擬DOM

2.1概念:一個對象

2.2.React中為組件大寫原因:如果標簽的首字母是小寫,就會被認定為原生標簽,反之就是React組件

2.3虛擬DOM優勢:

①效率高,不用關注原生DOM,更關注業務層

②性能提升:瀏覽器在處理DOM的時候會很慢,處理JavaScript會很快。虛擬DOM減少真實DOM操作,提升性能。

③虛擬DOM不一定提升性能。虛擬DOM優勢在于diff算法和批量處理策略。首次加載,比起原生DOM,虛擬DOM多了一層計算,消耗了性能 ,會比html慢

④兼容性和跨平臺性

3.構建虛擬DOM

3.1 React.createElement?

3.1.1 react自身可以防止xss攻擊(跨站腳本攻擊)

3.2 轉換為真是DOM:虛擬DOM轉化為真實DOM的這個過程實際上非常復雜,大體上可以分為四步:?處理參數批量處理生成html渲染html

4.diff算法

4.1 與傳統diff算法相比復雜度從O(n^ 3)?轉化為O(n)?

4.2 diff策略

React通過三大策略完成了優化:

  1. Web UI 中 DOM 節點跨層級的移動操作特別少,可以忽略不計。
  2. 擁有相同類的兩個組件將會生成相似的樹形結構,擁有不同類的兩個組件將會生成不同的樹形結構。
  3. 對于同一層級的一組子節點,它們可以通過唯一 id 進行區分。

分別對應:tree diffcomponent diffelement diff

三 react fiber 是react16新增的更新機制,讓react 更新過程可控,提升性能

在react v16之前更新組件只有兩層,分別是:

  • Reconciler(調和器)—— 負責找出變化的組件;
  • Renderer(渲染器)—— 負責將變化的組件渲染到頁面上; 缺點就是采用遞歸的方式去調和虛擬Dom且這個調和的過程不能被打斷。如果是一個很大的項目,很容易卡住頁面。 react v16+新增加了一層調度器。分別是:
  • scheduler(調度器)—— 負責調度任務的優先級,優先級高的任務有限執行。暫停其他任務。
  • Reconciler(協調器)—— 負責找出變化的組件:更新工作從遞歸變成了可以中斷的循環過程。Reconciler內部采用了Fiber的架構
  • Renderer(渲染器)—— 負責將變化的組件渲染到頁面上;

1.每個元素都有fiber對象對應,形成fiber樹

2.react fiber的更新過程是碎片化的,一次更新會分成n個任務片。每個片執行完成后就將控制權給到調度器。

3.調度器查看有沒有更高級任務(比如 alert,onclick等),如果有就執行更高級任務,沒有久久繼續執行fiber更新。該功能基于requestldeleCallback實現

????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164079.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

主流的低代碼平臺有哪些?程序員應該如何與低代碼相處?

本文主要闡述低代碼的概念,介紹目前主流的低代碼平臺,總結低代碼平臺的典型特征、存在優勢以及未來發展趨勢。并站在程序員的角度,分析如何在已經到來的低代碼戰爭中,找到自己的定位,一展所長。 什么是低代碼&#xff…

脈沖寬度基礎知識簡介

脈沖寬度是指脈沖所能達到的最大值所持續的周期時間。脈沖寬度是電子領域中一個重要的概念,它與脈沖重復間隔和占空比等參數密切相關。 脈沖寬度通常用于電信號的測量,可以用來描述脈沖的形狀、幅度和寬度等特性。在雷達和電源領域中,脈沖寬度…

Flink 替換 Logstash 解決日志收集丟失問題

在某客戶日志數據遷移到火山引擎使用 ELK 生態的案例中,由于客戶反饋之前 Logstash 經常發生數據丟失和收集性能較差的使用痛點,我們嘗試使用 Flink 替代了傳統的 Logstash 來作為日志數據解析、轉換以及寫入 ElasticSearch 的組件,得到了該客…

實現一個計算機

圖片&#xff1a; 實現代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body {padding: 20px;font-family: Arial;}.calc-wrap {width: 300px;bor…

VL06O報表添加增強字段

業務描述 用戶需要在VL06O事務代碼下進行批量交貨過賬&#xff0c;現有的篩選條件不太適用當前公司的業務&#xff0c;需要在報表中新增三個交貨單增強字段&#xff0c;方便其篩選&#xff08;選擇屏幕沒有加&#xff0c;用戶在報表里用標準按鈕功能自己篩選&#xff09; 效果…

十一 動手學深度學習v2計算機視覺 ——微調

一、網絡架構 一個神經網絡一般可以分成兩塊 特征抽取&#xff0c;將原始像素變成容易線性分割的特征。線性分類器來做分類。 二、訓練 是一個目標數據集上的正常訓練任務&#xff0c; 但使用更強的正則化 使用更小的學習率使用更少的數據迭代 源數據集遠遠復雜于目標數據集…

藍橋杯算法雙周賽心得——迷宮逃脫(dp)

大家好&#xff0c;我是晴天學長&#xff0c;dp版的來啦&#xff0c;可以是受益匪淺啊&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .迷宮逃脫 迷官逃脫[算法賽] 問題描述 在數學王國中&#xff0c;存…

便攜式心電圖機方案_基于MT6735平臺的手持心電圖機

便攜式心電圖機具備體積小、易攜帶、兼容12導模式的特點&#xff0c;通過工頻濾波、基線濾波和肌電濾波等處理&#xff0c;能夠獲得更精準的心電圖譜。該設備可以與醫院信息系統(HIS)相連接&#xff0c;實現患者信息的共享。采集的心電數據可以通過無線方式發送到心電判讀平臺&…

企業建數倉的第一步是選擇一個好用的ETL工具

當企業決定建立數據倉庫&#xff08;Data Warehouse&#xff09;&#xff0c;第一步就是選擇一款優秀的ETL&#xff08;Extract, Transform, Load&#xff09;工具。數據倉庫是企業數據管理的核心&#xff0c;它存儲、整合并管理各種數據&#xff0c;為商業決策和數據分析提供支…

PC8250(CC-CV控制)5V/8A同步降壓恒流恒壓軟啟動帶EN功能只需極少外圍元件

概述 PC8250是一個同步降壓轉換器輸出電流至8A。它的設計允許操作電源電壓范圍從9V到42V。外部關閉功能可以通過邏輯電平來控制COMP/EN引腳下降&#xff0c;然后進入待機模式。外部補償使反饋控制具有良好的線路和負載調節&#xff0c;外部設計靈活。PC8250在CC&#xff08;恒定…

【讀懂AUTOSAR規范】PduR 緩存分配(Buffer allocation)

1. 前言 PDU路由器模塊支持將I-PDU從一個源總線網關到一個或多個目標總線。與從/到本地模塊的傳輸和接收不同,PDU路由器模塊必須同時充當接收器和發射器,并且在某些情況下還提供I-PDU的緩沖。網關需求被有意地分離,以便在不需要網關的情況下高效實現PDU路由器模塊。如果PDU…

華三無線控制器WX2540H配合準入做Portal認證

數據通信 - 建設篇 - 無線 第四章 華三無線控制器WX2540H配合準入做Portal認證 數據通信 - 建設篇 - 無線系列文章回顧華三無線控制器WX2540H配合準入做Portal認證前言其他配置優化參考來源系列文章回顧 第一章 華三無線控制器配置本地轉發 第二章 華三無線控制器配置802.1X認…

Redis-Day1基礎篇(初識Redis, Redis常見命令, Redis的Java客戶端)

Redis-Day1基礎篇 初識Redis認識NoSQL認識Redis安裝Redis啟動RedisRedis客戶端 Redis命令數據結構介紹通用命令操作命令StringHashListSetSortedSet Redis的Java客戶端客戶端對比Jedis客戶端Jedis快速入門Jedis連接池 SpringDataRedis客戶端SpringDataRedis概述SpringDataRedis…

boardmix AI思維導圖,一鍵自動生成思維導圖!

在日常學習和工作中&#xff0c;我們常常需要記憶和整理大量的知識點和思維結構。 此時&#xff0c;思維導圖的存在就大大方便了我們的工作。與傳統的文本筆記不同&#xff0c;思維導圖可以結合文字、圖像、顏色等多種元素&#xff0c;幫助我們更好地整理和分析知識的關系&…

centos7上用docker部署redis

1. 下載redis鏡像 docker pull redis docker images # 查看鏡像是否下載成功2. 安裝redis容器 2.1 先準備好配置文件redis.conf vi /data/redis/redis.conf寫入配置信息&#xff0c;appendonly yes&#xff0c;如果需要給redis配置密碼&#xff0c;可以寫入requirepass root…

如何選擇更快更穩定的存儲服務器

如何選擇更快更穩定的存儲服務器 存儲介質&#xff1a;存儲服務器的主要存儲介質包括固態硬盤&#xff08;SSD&#xff09;和機械硬盤&#xff08;HDD&#xff09;。相比于機械硬盤&#xff0c;固態硬盤具有更高的讀寫速度和更低的延遲&#xff0c;因此能夠提供更快的數據傳輸…

python安裝的記錄

python setup.py install --user

(附程序)AD采集中的10種經典軟件濾波程序優缺點分析

前言 本次我們學習一下AD采集的一些簡單的軟件濾波算法并分析優缺點 本篇博客大部分是自己收集和整理&#xff0c;如有侵權請聯系我刪除。 AD采樣點的電壓多少有點起伏波動&#xff0c;經運放放大后電壓的波動如果超過ADC的分辯率&#xff0c;則顯示的值會出現波動。波動如…

RTOS的任務觸發底層邏輯

&#xff08;定時器用于計時和觸發事件&#xff0c;任務則由調度器進行調度和執行&#xff1a;每當時鐘節拍到達時&#xff0c;系統會觸發一個稱為 tick 中斷的事件。當 tick 中斷發生時&#xff0c;操作系統會在中斷服務例程中執行一定的處理&#xff0c;其中包括更新任務的運…

C++算法入門練習——相同的二叉查找樹

將第一組n?個互不相同的正整數先后插入到一棵空的二叉查找樹中&#xff0c;得到二叉查找樹T1?&#xff1b;再將第二組n個互不相同的正整數先后插入到一棵空的二叉查找樹中&#xff0c;得到二叉查找樹T2?。判斷T1?和T2??是否是同一棵二叉查找樹。 二叉查找(搜索)樹定義&am…