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.mzph.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;兼容也不错。…