Vue底層換成啥了?如何更新DOM的?

在這里插入圖片描述
摘要

之前的vue是使用虛擬 DOM的,但是Vue 3.6 帶來了一個意義重大的更新: Vapor Mode 渲染模式。

Vue 渲染策略的演進:

  1. Vue 1.x: 基于模板渲染策略,直接將模板轉換為DOM元素,并為每個DOM元素創建響應式綁定。
  2. Vue 2.x: 引入虛擬DOM,使渲染過程更加高效。虛擬DOM通過diff算法與真實DOM進行比較,減少了對DOM樹的操作。
  3. Vue 3.x: 在虛擬DOM基礎上,進一步優化了編譯器,支持靜態分析,生成更加高效的渲染函數。這使得Vue3在渲染性能方面相較于Vue2有了顯著提升。

虛擬 DOM 的局限性:

盡管 Vue 3.x 引入了更強大的編譯器,虛擬 DOM 依然面臨內存消耗和計算開銷的問題。虛擬 DOM需要對每次更新的節點進行遍歷并計算差異,尤其是在渲染大量動態內容時,性能優勢有限,所以換成Vapor Mode。

Vapor Mode是什么?

Vue 3.6 推出的編譯期DOM優化模式,通過跳過運行時虛擬DOM,直接將模板編譯為原生DOM操作代碼,實現更高效的渲染性能。

核心特性:

  1. 無虛擬DOM?: 運行時不再創建虛擬節點、對比(diff)或修補(patch),直接生成原生DOM操作指令。 ?
  2. 性能提升?: 編譯時靜態分析模板,減少運行時DOM操作次數,包體積更小,渲染速度更快。
  3. ?跨平臺兼容?: 保留Vue原有的跨平臺能力(如Web、SSR、小程序等)。 ?

怎么工作的?

  1. 編譯階段分析模板: Vue 編譯器在構建時會分析< template >中的內容,識別哪些是靜態的、哪些是響應式的。
    靜態部分:如< div >標簽,編譯器會生成一次性創建它們的代碼,運行時無需理會。
    動態綁定:如 {{ count }},每一個綁定都會生成一個獨立的 “更新函數”。創建“Effect 函數”:每個響應式綁定都會生成一個獨
  2. 立的副作用函數(effect):
    它知道自己依賴哪個響應式數據(如ref或reactive屬性``)
    它知道自己要操作哪個 DOM 節點(如某個< p >)
    它知道要執行的操作是什么(如更新 textContent、修改class或調整style)

也就是說,一旦數據變化,只會觸發該數據相關的DOM更新邏輯。

舉個例子:

<template><div><h1>前端充電寶</h1><p>計數器: {{ count }}</p><button @click="count++">增加</button></div>
</template><script setup>
import { ref } from 'vue'
const count = ref(0)
</script>

在 傳統模式 中:

  • 點擊按鈕時:Vue 會重新執行 render(),生成一份新的虛擬DOM;
  • 然后 diff,找出 count 變了;最后再更新< p >標簽的文本。
effect(() => {pElement.textContent = '計數器: ' + count.value
})

在 Vapor Mode 中:

  • 編譯時,Vue 識別出< p >的文本綁定了count;它為這個綁定生成一個更新函數。
  • 當點擊按鈕后,count 更新,這個 effect 就直接執行,精準更新 <p> 的內容。全程沒有虛擬 DOM,也沒有 diff,對性能極為友好。

使用方式:

通過在 單文件組件 的< script >標簽中添加 vapor 屬性即可啟用,無需修改業務邏輯代碼。 ?

適用場景:

主要解決傳統虛擬DOM在動態節點較多時的性能瓶頸,例如高頻更新的數據綁定或復雜組件渲染場景。

有啥優勢?

  • 更新速度快: 跳過 diff,只更新真正變化的 DOM;
  • 占用更少內存: 不再維護虛擬 DOM;
  • 首次渲染更快: 直接創建真實 DOM;
  • 打包體積更小: 可移除虛擬 DOM 相關代碼;
  • 按需啟用: 可在組件級別使用 Vapor,不影響全局;

那是不是虛擬 DOM 就過時了?
不是。Vue 并沒有一刀切,而是走了“混合動力”路線:

  • Vapor Mode 是可選的;
  • < script setup> 中使用 vapor 關鍵字即可開啟;
  • 也可以通過 createVaporApp() 創建純 Vapor 應用。

這意味著你可以:

  • 在關鍵性能組件里啟用 Vapor;
  • 在其它部分繼續使用虛擬 DOM。

什么時候用虛擬 DOM ,什么時候用 Vapor?

繼續使用虛擬 DOM 的場景:

  • 組件結構動態復雜,依賴 render 函數;

  • 項目已成規模,虛擬 DOM 的性能已滿足需求;

擁抱 Vapor Mode 的場景:

  • 組件結構靜態明確,狀態變化點固定;

  • 對性能要求極高:如移動端、嵌入式、實時數據 UI;

  • 構建時間允許進行編譯優化分析。

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

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

相關文章

0722 數據結構順序表

Part 1.順序表的代碼一.順序表的內存申請head.h: typedef int datatype;typedef struct sqlist {//數據元素datatype data[MAXSIZE];//順序表長度int len;}*sqlist; //*sqlist的作用: //sqlist:struct Sqlist * sqlist create();head.c: sqlist create() {sqlist list (sqlist)…

為何在 Vue 的 v-model 指令中不能使用可選鏈(Optional Chaining)?

Vue 的 v-model 是實現組件與數據雙向綁定的核心指令之一&#xff0c;它本質上是一個語法糖&#xff0c;用于簡化對表單元素和組件 props 的同步更新。然而&#xff0c;在 Vue 3&#xff08;以及 Vue 2 的某些模式下&#xff09;&#xff0c;開發者嘗試在 v-model 中使用 JavaS…

基于單片機智能藥盒/智能藥箱/定時吃藥系統

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 本設計實現了一種基于單片機的智能藥盒&#xff0c;系統以微控制器&#xff08;如STM32&#xff…

(25)python+playwright自動化處理單選和多選按鈕-中

1.簡介上一篇中講解和介紹的單選框有點多&#xff0c;而且由于時間的關系&#xff0c;決定今天講解和分享復選框的相關知識。2.什么是單選框、復選框&#xff1f;單選按鈕一般叫raido button&#xff0c;就像我們在電子版的單選答題過程一樣&#xff0c;單選只能點擊一次&#…

Nginx IP授權頁面實現步驟

目標&#xff1a;一、創建白名單文件sudo mkdir -p /usr/local/nginx/conf/whitelist sudo touch /usr/local/nginx/conf/whitelist/temporary.conf二、創建Python認證服務文件路徑&#xff1a;/opt/script/auth_server.pyimport os import time from flask import Flask, requ…

2025年7月中科院一區-向光生長優化算法Phototropic growth algorithm-附Matlab免費代碼

引言 本期介紹一種新的元啟發式算法——向光生長優化算法Phototropic growth algorithm&#xff0c;PGA。靈感來自植物細胞在陽光下的生長模式。于2025年7月最新發表在JCR 1區&#xff0c;中科院1區 SCI 期刊 Knowledge-Based Systems。 該算法將生物學啟發的確定性生長行為與…

poi-excel-添加水印

1、官網快速指南 https://poi.apache.org/components/spreadsheet/quick-guide.html 訪問如上地址可以查看到poi的相關操作方式&#xff1a; How to create a new workbookHow to create a sheetHow to create cellsHow to create date cellsWorking with different types of…

STM32 開發的鼠標:技術詳解與實現指南

概述基于STM32微控制器開發的鼠標是一種高度可定化的輸入設備解決方案&#xff0c;廣泛應用于工業控制、嵌入式系統、特殊人機交互等領域。相比傳統鼠標&#xff0c;STM32鼠標具有以下優勢&#xff1a;高度可定制性&#xff1a;可添加特殊功能按鍵、傳感器集成低功耗設計&#…

GoLang教程007:打印空心金字塔

4.6 案例一&#xff1a;打印金字塔編寫一個程序&#xff0c;可以接收一個整數&#xff0c;表示層數&#xff0c;打印出金字塔。1??第一步&#xff1a;打印一個矩形 package mainimport "fmt"func main() {// i表示層數for i : 1; i < 3; i {// j表示每層打印多少…

iOS開發 Swift 速記3:運算符與控制結構

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的&#xff0c;可以在任何平臺上使用。 源碼指引&#xff1a;github源…

ElasticSearch中需要注意的點,附官方文檔解讀

1.批量更新數量大小限制 https://www.elastic.co/guide/cn/elasticsearch/guide/current/bulk.html#_How_Big_Is_Too_Big 整個批量請求都需要由接收到請求的節點加載到內存中&#xff0c;因此該請求越大&#xff0c;其他請求所能獲得的內存就越少。批量請求的大小有一個最佳值…

Git GitHub精通:前端協作開發的“瑞士軍刀“!

前言&#xff1a;為什么你的代碼總是"失蹤"&#xff1f; "啊&#xff01;我的代碼呢&#xff1f;"——這可能是每個程序員都曾發出過的靈魂吶喊。還記得上周我熬夜寫的300行JavaScript&#xff0c;第二天醒來發現被自己手賤覆蓋了&#xff0c;那一刻我深刻…

第 30 場 藍橋·算法入門賽 題解

1. 零食爭議【算法賽】 簽到題&#xff1a;1-7奇數相加 #include <bits/stdc.h> using namespace std; int main() {// 請在此輸入您的代碼cout<<1357;return 0; } 2. 數字炸彈【算法賽】 把n個人看為前n-1和后n-1 &#xff0c; 方便找到是第幾段的第幾個數 #in…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第二十四課——圖像直方圖均衡化的FPGA實現

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊top_tb.bat文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程…

LabVIEW 2025安裝包| 免費免激活版下載| 附圖文詳細安裝教程

[軟件名稱]&#xff1a;LabVIEW 2025 [軟件大小]&#xff1a;13 G [系統要求]&#xff1a;支持Win7及更高版本 [下載通道]:夸克網盤 [下載鏈接]: https://pan.quark.cn/s/7e9527cc06a3 &#xff08;建議用手機保存到網盤后&#xff0c;再用電腦下載&#xff09; 更多免費軟件&a…

如何實現泵站的無人值守:御控智慧水務平臺

在城鄉供水、農田灌溉、工業循環水等場景中&#xff0c;泵站作為核心動力設施&#xff0c;其運行效率直接影響水資源調配的穩定性。然而&#xff0c;傳統泵站管理長期面臨三大痛點&#xff1a;人力成本高昂&#xff1a;偏遠地區泵站需24小時值守&#xff0c;單站年均人力成本超…

深度學習篇---車道線循跡

要實現基于深度學習的雙車道線&#xff08;黃色車道線&#xff09;循跡&#xff08;通過預測四個輪子的轉速實現自主控制&#xff09;&#xff0c;需要從數據采集、模型設計、訓練策略、環境適應等多維度系統優化。以下是具體方案及需要注意的關鍵事項&#xff0c;旨在提升精準…

JavaScript,發生異常,try...catch...finally處理,繼續向上層調用者傳遞異常信息

JavaScript中&#xff0c;?異常&#xff08;Exception&#xff09;和錯誤&#xff08;Error&#xff09; JavaScript 是一種解釋型語言&#xff0c;通常在瀏覽器中通過JavaScript引擎執行。最著名的兩個引擎是&#xff1a;SpiderMonkey&#xff08;由 Mozilla Firefox 使用&a…

SpringMVC快速入門之啟動配置流程

SpringMVC快速入門之啟動配置流程一、SpringMVC啟動的核心流程二、環境準備與依賴配置2.1 開發環境2.2 Maven依賴配置三、初始化Servlet容器&#xff1a;WebApplicationInitializer3.1 實現WebApplicationInitializer3.2 配置編碼過濾器&#xff08;解決中文亂碼&#xff09;四…

ArcGIS水文及空間分析與SWMM融合協同在城市排水防澇領域中的應用

隨著計算機的廣泛應用和各類模型軟件的發展&#xff0c;將排水系統模型作為城市洪災評價與防治的技術手段已經成為防洪防災的重要技術途徑。將創新性融合地理信息系統&#xff08;GIS&#xff09;的空間分析能力與暴雨雨水管理模型&#xff08;SWMM&#xff09;的水動力計算優勢…