BOM和DOM

關于DOM、BOM和diff算法

瀏覽器對象模型(Browser Object Model,簡稱BOM)和文檔對象模型(Document Object Model,簡稱DOM)是Web開發中的兩個核心概念,它們都與瀏覽器和網頁的交互有關。以下是BOM和DOM的詳細總結:

瀏覽器對象模型(BOM)

  1. 定義:BOM是Web頁面與瀏覽器之間的接口,提供了與瀏覽器交互的方法和屬性。

  2. 主要目的

    • 允許JavaScript操作瀏覽器窗口。
    • 訪問瀏覽器的功能,如歷史記錄、地址欄、前進和后退按鈕。
  3. 組成

    • window對象:BOM的頂級對象,代表瀏覽器窗口。
    • document對象:代表整個HTML文檔,是DOM的入口點。
  4. 功能

    • 操作瀏覽器窗口,如打開新窗口、改變窗口大小等。
    • 訪問瀏覽器歷史記錄(history對象)。
    • 訪問瀏覽器的會話存儲(sessionStorage)和本地存儲(localStorage)。
    • 與瀏覽器的導航功能交互。
  5. 事件

    • 可以監聽和觸發瀏覽器事件,如resizescrollbeforeunload等。
  6. 局限性:BOM的實現依賴于瀏覽器,不同的瀏覽器可能有不同的BOM實現。

文檔對象模型(DOM)

  1. 定義:DOM是HTML和XML文檔的編程接口,提供了一種方式來訪問和操作文檔的結構、樣式和內容。

  2. 主要目的

    • 允許JavaScript操作網頁的元素和屬性。
    • 允許動態修改網頁內容。
  3. 組成

    • document對象:DOM的入口點,代表整個HTML文檔。
    • 元素節點(Element Nodes):如divpa等HTML標簽。
    • 屬性節點(Attribute Nodes):元素的屬性,如classid等。
    • 文本節點(Text Nodes):元素內的文本內容。
  4. 功能

    • 訪問和修改HTML元素和屬性。
    • 動態創建、刪除和修改元素和文本。
    • 遍歷和搜索元素。
  5. 事件

    • 可以監聽和觸發DOM事件,如clickmouseoverload等。
  6. 標準性:DOM是W3C的標準,大多數瀏覽器都遵循這個標準。

  7. 與CSSOM的關系:CSS對象模型(CSSOM)是DOM的一部分,用于操作CSS樣式。

  8. 性能考慮:DOM操作可能影響頁面性能,特別是在頻繁操作時。

Diff算法在虛擬DOM(Virtual DOM)中扮演著核心角色,尤其是在現代前端框架如React中。以下是關于虛擬DOM和Diff算法的一些關鍵點:

虛擬DOM(Virtual DOM)

  1. 定義:虛擬DOM是一個輕量級的JavaScript對象,它代表了一個真實的DOM樹的結構。它是一個JavaScript對象,而不是實際的DOM元素。

  2. 目的

    • 提供一種高效的方式來描述UI界面。
    • 避免直接操作真實的DOM,減少瀏覽器的重繪和回流。
  3. 工作原理

    • 當狀態或屬性發生變化時,框架創建一個新的虛擬DOM樹。
    • 通過Diff算法比較新舊虛擬DOM樹的差異。
    • 根據差異更新真實的DOM樹,而不是重新渲染整個界面。
  4. 優勢

    • 提高性能:減少DOM操作次數,避免不必要的重繪和回流。
    • 易于維護:開發者可以專注于JavaScript邏輯,而不是DOM操作。

Diff算法

  1. 定義:Diff算法是一種比較兩棵樹(在這種情況下是兩棵虛擬DOM樹)差異的算法。

  2. 目的

    • 找出兩棵樹之間的差異,以便只更新變化的部分。
  3. 工作原理

    • 從虛擬DOM樹的根節點開始,遞歸地比較新舊樹的節點。
    • 如果節點相同,繼續比較子節點。
    • 如果節點不同,標記為需要更新或刪除。
  4. 關鍵點

    • 同層比較:只比較相同層級的節點,忽略跨層級的變化。
    • 順序優化:通過優化DOM元素的順序來減少不必要的操作。
    • 組件化:組件的Diff算法可能包含特定的邏輯,以處理組件的特定行為。
  5. React中的Diff算法

    • React使用啟發式的Diff算法,它在大多數情況下表現良好,但在某些極端情況下可能不是最優的。
    • React的Diff算法考慮了多種因素,如DOM類型、key屬性等。
  6. 性能考慮

    • 雖然Diff算法可以顯著提高性能,但在大型應用中,過度的Diff計算也可能成為性能瓶頸。
  7. 框架:React,Vue和Angular等都有自己的虛擬DOM和Diff算法實現。

作用:

虛擬DOM和Diff算法是現代前端框架提高性能的關鍵技術。通過使用虛擬DOM,框架可以避免直接操作DOM,減少瀏覽器的重繪和回流。Diff算法則確保只更新變化的部分,進一步提高了性能。這些技術使得開發者可以更高效地構建復雜的用戶界面,同時保持代碼的可維護性。

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

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

相關文章

Codeforces Round 955 E. Number of k-good subarrays【分治、記憶化】

E. Number of k-good subarrays 題意 定義 b i t ( x ) bit(x) bit(x) 為 x x x 的二進制表示下 1 1 1 的數量 一個數組的子段被稱為 k ? g o o d k-good k?good 的當且僅當:對于這個子段內的每個數 x x x,都有 b i t ( x ) ≤ k bit(x) \leq k…

鴻蒙開發管理:【@ohos.account.distributedAccount (分布式帳號管理)】

分布式帳號管理 本模塊提供管理分布式帳號的一些基礎功能,主要包括查詢和更新帳號登錄狀態。 說明: 本模塊首批接口從API version 7開始支持。后續版本的新增接口,采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔&#xff…

自動化設備上位機設計 四

目錄 一 設計原型 二 后臺代碼 一 設計原型 二 后臺代碼 using SimpleTCP; using SqlSugar; using System.Text;namespace 自動化上位機設計 {public partial class Form1 : Form{SqlHelper sqlHelper new SqlHelper();SqlSugarClient dbContent null;bool IsRun false;i…

C# 命名規范

開頭bool類型的變量常用縮寫 變量命名規范camelCase: 私有字段,局部變量,入參PascalCase: 命名空間、類名,方法名snake_ case、 kebab_case: 不使用 一般方法名稱遵守PascalCase命名規范例外情況: 異步方法異步方法例外情況 合理選擇單詞選擇…

【CSS】縮寫屬性place-items

place-items 是 CSS 中的一個簡寫屬性,它允許在相關的布局(如 Grid 或 Flexbox)中同時沿著塊級和內聯方向對齊元素。這個屬性是 align-items 和 justify-items 屬性的簡寫形式。如果未提供第二個值,則第一個值將作為第二個值的默認…

論文翻譯 | (DSP)展示-搜索-預測:為知識密集型自然語言處理組合檢索和語言模型

摘要 檢索增強式上下文學習已經成為一種強大的方法,利用凍結語言模型 (LM) 和檢索模型 (RM) 來解決知識密集型任務。現有工作將這些模型結合在簡單的“檢索-讀取”流程中,其中 RM 檢索到的段落被插入到 LM 提示中。 為了充分發揮凍結 LM 和 RM 的…

ARM/Linux嵌入式面經(十一):地平線嵌入式實習

地平線嵌入式實習面經 1.自我介紹 等著,在給大哥們準備了。 2.spi與iic協議可以連接多個設備嗎?最多多少個?通訊時序。 這是幾個問題,在回答的時候。不要一問就開口,花幾秒鐘沉吟思考整理一下自己的思路。 這個問題問了幾個點?每個點的回答步驟。 是我的話,我會采用以…

# Sharding-JDBC 從入門到精通(9)- 綜合案例(二)添加商品

Sharding-JDBC 從入門到精通(9)- 綜合案例(二)添加商品 一、Sharding-JDBC 綜合案例-添加商品-dao 1、在 shopping 子工程(子模塊)中,創建 dao 接口類 ProductDao.java /*** dbsharding\sh…

基于深度學習LightWeight的人體姿態之行為識別系統源碼

一. LightWeight概述 light weight openpose是openpose的簡化版本,使用了openpose的大體流程。 Light weight openpose和openpose的區別是: a 前者使用的是Mobilenet V1(到conv5_5),后者使用的是Vgg19(前10…

哈希表——C語言

哈希表(Hash Table)是一種高效的數據結構,能夠在平均情況下實現常數時間的查找、插入和刪除操作。 哈希表的核心是哈希函數,哈希函數是一個將輸入數據(通常稱為“鍵”或“key”)轉換為固定長度的整數的函數…

Efficient Contrastive Learning for Fast and Accurate Inference on Graphs

發表于:ICML24 推薦指數: #paper/??? 創新點一顆星,證明三顆星(證明的不錯,值得借鑒,但是思路只能說還行吧) 如圖, 本文采取的創新點就是MLP用原始節點,GCN用鄰居節點的對比學習.這樣,可以加快運算速度 L E C L ? 1 ∣ V ∣ ∑ v ∈ V 1 ∣ N ( v ) ∣ ∑ u ∈ N ( v )…

一篇文章Scala語言入門

Scala是一種現代編程語言,它結合了面向對象編程和函數式編程的特性,使得編寫簡潔、可擴展和高效的代碼成為可能。 1. 什么是Scala? Scala(Scalable Language)是一種面向對象和函數式編程語言。它運行在JVM&#xff0…

k8s 部署 springboot 項目內存持續增長問題分析解決

寫在前面 工作中遇到,請教公司前輩解決,簡單整理記憶博文內容涉及一次 GC 問題的分析以及解決理解不足小伙伴幫忙指正 😃,生活加油 99%的焦慮都來自于虛度時間和沒有好好做事,所以唯一的解決辦法就是行動起來,認真做完…

語音識別FBank特征提取學習筆記

語音識別就是把一段語音信號轉換成對應的文本信息,這一過程包括四個大的模塊,分別是:特征提取、聲學模型、語言模型、字典與解碼。 本篇就來梳理一下特征提取模塊的實現思路和方法。 常用的語音特征有: 梅爾頻率倒譜系數&#x…

學生管理系統(通過順序表,獲取連續堆區空間實現)

將學生的信息,以順序表的方式存儲(堆區),并且實現封裝函數 : 1】順序表的創建, 2】判滿、 3】判空、 4】往順序表里增加學生信息、 5】遍歷學生信息 6】任意位置插入學生信息 7】任意位置刪除學生信…

0301STM32GPIO外設輸出

STM32GPIO外設輸出 STM32內部的GPIO外設GPIO簡介基本結構GPIO位結構輸入部分:輸出部分: GPIO八種工作模式浮空/上拉/下拉輸入模擬輸入開漏/推挽輸出復用開漏/推挽輸出 手冊寄存器描述GPIO功能描述外設的GPIO配置GPIO寄存器描述端口輸入數據寄存器端口輸出…

QT入門筆記-自定義控件封裝 30

具體代碼如下: QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 …

并查集(還有反集也在)

一.定義 定義: 并查集是一種樹型的數據結構,用于處理一些不相交集合的合并及查詢問題(即所謂的并、查)。比如說,我們可以用并查集來判斷一個森林中有幾棵樹、某個節點是否屬于某棵樹等。 主要構成: 并查集…

PHP-實例-文件上傳

1 需求 2 basename 在 PHP 中,basename() 函數用于返回路徑中的文件名部分。如果路徑中包含了文件擴展名,則該函數也會返回它。如果路徑的結尾有斜杠(/)或反斜杠(\),則 basename() 函數會返回空…

Android計算器界面的設計——表格布局TableLayout實操

目錄 任務目標任務分析任務實施 任務目標 使用TextView、Button等實現一個計算器界面,界面如圖1所示。 圖1 計算器界面效果圖 任務分析 界面整體使用表格布局,第一行使用一個TextView控件,橫跨4列,中間4行4列,最后一…