【理論知識學習】虛擬DOM節點

来源:https://www.cnblogs.com/xjf125/archive/2020/03/01/12392177.html
-Advertisement-
Play Games

React非常快速是因為它從不直接操作DOM。 虛擬DOM是在DOM的基礎上建立了一個抽象層,對數據和狀態所做的任何改動,都會被自動且高效的同步到虛擬DOM,最後再批量同步到DOM中。 在React中,render執行的結果得到的並不是真正的DOM節點,而僅僅是JavaScript對象,稱之為虛擬D ...


  React非常快速是因為它從不直接操作DOM。

  虛擬DOM是在DOM的基礎上建立了一個抽象層,對數據和狀態所做的任何改動,都會被自動且高效的同步到虛擬DOM,最後再批量同步到DOM中。

  在React中,render執行的結果得到的並不是真正的DOM節點,而僅僅是JavaScript對象,稱之為虛擬DOM。

  虛擬DOM具有批處理和高效的Diff演算法,可以無需擔心性能問題而隨時“刷新”整個頁面,因為虛擬DOM可以確保只對界面上真正變化的部分進行實際的DOM操作。

  在實際開發中無需關心虛擬DOM是如何運作的,但理解其運行機制不僅有助於更好的理解React組件的生命周期,而且對於進一步優化 React程式也有很大幫助。

 1、傳統App與React App的對比:

  傳統App:

 

  React App:  

 

 2、虛擬DOM的原理:

  React會在記憶體中維護一個虛擬DOM樹,對這個樹進行讀或寫,實際上是對虛擬DOM進行。當數據變化時,React會自動更新虛擬DOM,然後將新的虛擬DOM和舊的虛擬DOM進行對比,找到變更的部分,得出一個diff,然後將diff放到一個隊列里,最終批量更新這些diff到DOM中。

 3、虛擬DOM的優點:

  最終表現在DOM上的修改只是變更的部分,可以保證非常高效的渲染。

 4、虛擬DOM的缺點:

  首次渲染大量DOM時,由於多了一層虛擬DOM的計算,會比innerHTML插入慢。

 5、虛擬DOM的理解誤區:

  對虛擬DOM的理解往往停留在:通過JavaScript對象模擬原生DOM,加上DOM Diff 極大提升了DOM操作的性能。然而,虛擬DOM最大的意義不在於性能的提升(JavaScript對象比DOM對象性能高),而在於抽象了DOM的具體實現(對DOM進行了一層抽象),這在瀏覽器中使用 React時不是特別明顯,因為寫的DOM標簽跟原生的沒有區別,並且最終都被渲染成了DOM,在React Native中將會有很好的說明。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 春節期間熟悉了TP6, 也寫了一個TP6的博客程式,但系統的異常頁面實在另外頭疼,很多時候無法查看到是哪行代碼出的問題。 所以就特別的想把whoops引進來,經過一系列的研究,終於找到瞭解決的辦法: 1. 通過composer安裝whoops 運行命令: composer require filp/ ...
  • 目錄 1. 隱式類型轉換 2. 顯示類型轉換/強制類型轉換( static_cast、const_cast、reinterpret_cast、dynamic_cast) 3. 類型轉換函數、轉換構造函數 類型轉換可分為 隱式類型轉換(編譯器自動完成) 與 顯示類型轉換(強制類型轉換,需要自己操作)。 ...
  • 先用一個數組表示一個二叉樹搜索樹,也就是一個排好序的二叉樹,其中左子結點<根結點<右子結點 利用結構數組的形式來表示,id , left , right 代表結點id ,左子樹 ,右子樹 下麵這個二維數組 $data[]=['id'=>8,'left'=>2,'right'=>10,'data'=> ...
  • 上一篇我們已經根據路徑讀取到了我們需要的位元組碼文件,就以java.lang.Object這個類為例,可以看到類似下麵這種東西,那麼這些數字是什麼呢? 要瞭解這個,我們大概可以猜到這是十進位的,線上將十進位轉為十六進位看看https://tool.oschina.net/hexconvert/,註意上 ...
  • [TOC] 下麵介紹pandas常見的基本功能,和python的基本數據類型進行比較可以看到pandas在操作大型數據集中的優勢。 1.重建索引 (1)函數:reindex (2)作用:創建一個符合新索引的新對象。 (3)內容: Series調用reindex方法時,會將數組按照新的索引進行排列,如 ...
  • 基於JSP+Servlet開發失物招領系統開發環境: Windows操作系統開發工具:Myeclipse+Jdk+Tomcat7+MYSQL資料庫運行效果圖 源碼及原文鏈接:https://javadao.xyz/forum.php?mod=viewthread&tid=115 ...
  • 基於JSP+Servlet開發公交線上查詢(前臺+後臺):( 開發環境: Windows操作系統開發工具: Eclipse+Jdk+Tomcat+MYSQL資料庫運行效果圖 源碼及原文鏈接:https://javadao.xyz/forum.php?mod=viewthread&tid=120 ...
  • @[toc] 1. Spring註解的源碼分析 1.1 我如何開始分析源碼的? ==這一部分可以略過直接看第1.2節== 想必程式員都會經過這樣一個階段,當 已經能夠熟練運用。並且它的 也能夠用到 ,程式員就會找進階的入口,這時候就想到了去瞭解源碼。 作為Java程式員,首先想到的一定是瞭解Spri ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...