Vue 3 中編譯時和運行時的概念區別

文章目錄

  • 前言
  • Vue 3 中的編譯時 vs 運行時區別
    • 模板在編譯時轉化為渲染函數
    • 編譯時的優化處理
    • 運行時的工作:創建組件實例與渲染流程


前言

詳細整理 Vue 3 中編譯時和運行時的概念區別,并重點解釋為什么組件實例是在運行時創建的。
我會結合官方文檔、源碼分析和社區解釋,確保內容清晰易懂,并配有示意圖來說明組件生命周期中的創建時機。

Vue 3 中的編譯時 vs 運行時區別

在 Vue 3 中,編譯時(compile time)指的是框架在運行應用之前,對組件模板進行的編譯處理;而運行時(runtime)是指應用實際執行、組件實例創建和更新 DOM 的階段。簡而言之,編譯時將模板“翻譯”成渲染函數代碼,運行時則執行這些代碼來創建組件實例、處理響應式數據并操作真實 DOM。

在 Vue 3 中,模板會先被編譯為渲染函數代碼,然后在運行時執行渲染函數產出虛擬 DOM 樹,并據此更新真實 DOM。組件實例持有響應式狀態,當狀態變化時會觸發重新渲染和虛擬 DOM patch 更新真實 DOM。
在這里插入圖片描述

模板在編譯時轉化為渲染函數

Vue 采用類似 Vue 2 的策略:提供類 HTML 的模板語法,但會在編譯時將模板編譯成等價的 渲染函數,該渲染函數返回虛擬 DOM (VNode) 樹。這個編譯過程主要分三步:

  1. 解析 (parse): 將模板字符串解析生成對應的 抽象語法樹 (AST)。AST 是模板的結構化表示,包含節點類型、屬性等信息,用于后續優化和代碼生成。在這一步,編譯器可以識別模板中的指令和結構,例如 v-ifv-for、自定義組件標簽等。

  2. 轉換 (transform): 對 AST 進行一系列轉換和優化處理。Vue 3 引入了插件化的 AST 轉換管線,每種指令 (如 v-ifv-forv-model 等) 都對應一個轉換插件,對 AST 節點進行操作。同時,編譯器在此階段對模板進行靜態分析,找出模板中不會改變的靜態內容和結構。對于靜態節點或靜態子樹,編譯器會做標記,并執行靜態提升等優化:將這些靜態節點提升為常量,從渲染函數中提取出來。這樣在每次重新渲染時就無需重復創建和對比這些不變的節點,提高運行時性能。

  3. 代碼生成 (generate): 將優化后的 AST 轉換為對應的渲染函數代碼字符串。最終得到的渲染函數會返回虛擬 DOM 樹。例如,一個簡單模板 <h1>Hello, {{ name }}</h1> 編譯后可能生成類似的渲染函數(簡化示意):

   function render(ctx) {with(ctx) 

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

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

相關文章

Spring 框架實戰:如何實現高效的依賴注入,優化項目結構?

Spring 框架實戰&#xff1a;如何實現高效的依賴注入&#xff0c;優化項目結構&#xff1f; 在當今的 Java 開發領域&#xff0c;Spring 框架占據著舉足輕重的地位。而依賴注入作為 Spring 的核心概念之一&#xff0c;對于構建高效、靈活且易于維護的項目結構有著關鍵作用。本…

創建虛擬服務時實現持久連接。

在調度器中配置虛擬服務&#xff0c;實現持久性連接&#xff0c;解決會話保持問題。 -p 【timeout】 -p 300 這5分鐘之內調度器會把來自同一個客戶端的請求轉發到同一個后端服務器。【不管使用的調度算法是什么。】【稱為持久性連接。】 作用&#xff1a;將客戶端一段時間…

說下RabbitMQ的整體架構

RabbitMQ 是一個基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09; 協議的開源消息中間件&#xff0c;RabbitMQ的整體架構圍繞消息的生產、路由、存儲和消費設計&#xff0c;旨在實現高效、可靠的消息傳遞&#xff0c;它由多個核心組件協同工作。 核心組件 …

STM32--GPIO

教程 視頻 博主教程 STM32系統結構圖 GPIO GPIO&#xff08;General Purpose Input/Output&#xff09;是STM32內部的一種外設。 一個STM32芯片內存在多個GPIO外設&#xff0c;每個GPIO外設有16個引腳&#xff1b; 比如GPIOA&#xff1a;PA0~PA15; GPIOB&#xff1a;PB0~…

QUIC協議優化:HTTP_3環境下的超高速異步抓取方案

摘要 隨著 QUIC 和 HTTP/3 的普及&#xff0c;基于 UDP 的連接復用與內置加密帶來了遠超 HTTP/2 的性能提升&#xff0c;可顯著降低連接握手與擁塞恢復的開銷。本文以爬取知乎熱榜數據為目標&#xff0c;提出一種基于 HTTPX aioquic 的異步抓取方案&#xff0c;并結合代理 IP設…

[論文閱讀]MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System

MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System http://arxiv.org/abs/2504.12757 推出了 MCP Guardian&#xff0c;這是一個框架&#xff0c;通過身份驗證、速率限制、日志記錄、跟蹤和 Web 應用程序防火墻 &#xff08;WAF&#xff09; 掃描來…

Redis客戶端緩存的4種實現方式

Redis作為當今最流行的內存數據庫和緩存系統&#xff0c;被廣泛應用于各類應用場景。然而&#xff0c;即使Redis本身性能卓越&#xff0c;在高并發場景下&#xff0c;應用與Redis服務器之間的網絡通信仍可能成為性能瓶頸。 這時&#xff0c;客戶端緩存技術便顯得尤為重要。 客…

eNSP中路由器OSPF協議配置完整實驗和命令解釋

本實驗使用三臺華為路由器&#xff08;R1、R2和R3&#xff09;相連&#xff0c;配置OSPF協議實現網絡互通。拓撲結構如下&#xff1a; 實驗IP規劃 R1: GE0/0/0: 192.168.12.1/24 (Area 0)Loopback0: 1.1.1.1/32 (Area 0) R2: GE0/0/0: 192.168.12.2/24 (Area 0)GE0/0/1: 192.…

內網滲透——紅日靶場三

目錄 一、前期準備 二、外網探測 1.使用nmap進行掃描 2.網站信息收集 3.漏洞復現(CVE-2021-23132) 4.disable_function繞過 5.反彈shell&#xff08;也&#xff0c;并不是&#xff09; 6.SSH登錄 7.權限提升&#xff08;臟牛漏洞&#xff09; 8.信息收集 9.上線msf 三…

解決Win11下MySQL服務無法開機自啟動問題

問題描述 在win11系統中&#xff0c;明明將MySQL服務設置成了自動啟動&#xff0c;但在重啟電腦后MySQL服務還是無法自動啟動&#xff0c;每次都要重新到計算機管理的服務中找到服務再手動啟動。 解決方式 首先確保mysql服務的啟動類型為自動。 設置方法&#xff1a;找到此電…

后端項目進度匯報

項目概述 本項目致力于構建一個先進的智能任務自動化平臺。其核心技術是一套由大型語言模型&#xff08;LLM&#xff09;驅動的后端系統。該系統能夠模擬一個多角色協作的團隊&#xff0c;通過一系列精心設計或動態生成的處理階段&#xff0c;來高效完成各種復雜任務&#xff…

深度學習中學習率調整:提升食物圖像分類模型性能的關鍵實踐

深度學習中學習率調整&#xff1a;提升食物圖像分類模型性能的關鍵實踐 接上篇保存最優模型&#xff0c;在深度學習模型訓練過程中&#xff0c;學習率作為核心超參數&#xff0c;其設置直接影響模型的收斂速度與最終性能。本文將結合食物圖像分類項目&#xff0c;深入探討學習…

Vue 3零基礎入門:從環境搭建到第一個組件

Vue 3零基礎入門&#xff1a;從環境搭建到第一個組件 一、Vue 3簡介 Vue.js是一款漸進式JavaScript框架&#xff0c;用于構建用戶界面。Vue 3是Vue的最新主要版本&#xff0c;于2020年9月發布&#xff0c;帶來了許多改進和新特性&#xff1a; 更快的渲染速度更小的包體積Com…

為了結合后端而學習前端的學習日志(1)——純CSS靜態卡片案例

前端設計專欄 使用純CSS創建簡潔名片卡片的學習實踐 在這篇技術博客中&#xff0c;我將分享我的前端學習過程&#xff0c;如何使用純HTML和CSS創建一個簡潔美觀的名片式卡片&#xff0c;就像我博客首頁展示的那樣。這種卡片設計非常適合作為個人簡介、產品展示或團隊成員介紹…

k8s監控方案實踐(一):部署Prometheus與Node Exporter

k8s監控方案實踐&#xff08;一&#xff09;&#xff1a;部署Prometheus與Node Exporter 文章目錄 k8s監控方案實踐&#xff08;一&#xff09;&#xff1a;部署Prometheus與Node Exporter一、Prometheus簡介二、PrometheusNode Exporter實戰部署1. 創建Namespace&#xff08;p…

谷歌最新推出的Gemini 2.5 Flash人工智能模型因其安全性能相較前代產品出現下滑

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【Python】PDF文件處理(PyPDF2、borb、fitz)

Python提供了多種方法和庫用于處理PDF文件&#xff0c;這些工具可以幫助開發者實現諸如讀取、寫入、合并、拆分以及壓縮等功能。以下是幾個常用的Python PDF操作庫及其基本用法&#xff08;PyPDF2、borb、fitz&#xff09;。 1. PyPDF2 PyPDF2 是一個功能強大的庫&#xff0…

websocketd 10秒教程

websocketd 參考地址&#xff1a;joewalnes/websocketd 官網地址&#xff1a;websocketd websocketd簡述 websocketd是一個簡單的websocket服務Server&#xff0c;運行在命令行方式下&#xff0c;可以通過websocketd和已經有程序進行交互。 現在&#xff0c;可以非常容易地構…

Spring Boot 基于 Cookie 實現單點登錄:原理、實踐與優化詳解

前言 在多系統交互的應用場景中&#xff0c;單點登錄&#xff08;SSO&#xff09;能夠顯著提升用戶體驗&#xff0c;減少重復登錄的繁瑣操作。基于 Cookie 的單點登錄方案&#xff0c;憑借其簡單直觀、瀏覽器原生支持的特性&#xff0c;成為快速實現單點登錄的有效方式。本文將…

ModBus協議詳解:從基礎概念到C#實現RTU與TCP通訊

ModBus協議是莫迪康公司為了讓PLC之間進行數據通信而設計出來的協議。它是一種總線協議&#xff0c;是一種一對多&#xff0c;上下級的關系。 它的應用廣泛&#xff0c;具有免費開源&#xff0c;操作簡單的有點&#xff0c;并且可以兼容串口和網絡通訊&#xff0c;兼容也不錯。…