vue2和vue3的渲染过程简述版

在这里插入图片描述

文章目录

  • vue2渲染过程
  • vue3渲染过程
      • 优化和扩充
  • vue2和vue3对比


vue2渲染过程

在Vue 2的渲染过程中,包括以下几个关键步骤:

  1. 解析模板:Vue 2使用基于HTML语法的模板,首先会将模板解析成抽象语法树(AST),用于后续的编译和渲染过程。

  2. 编译模板:将解析后的抽象语法树编译成渲染函数。编译过程包括静态标记、生成可复用的渲染函数以及处理动态绑定等操作。

  • 静态标记阶段通过遍历抽象语法树,给其中的静态节点打上标记,这些节点在重新渲染时可以被跳过,从而提升渲染性能。
  • 生成可复用的渲染函数阶段会将剩余的动态节点转换成JavaScript的渲染函数,这些函数接收数据作为入参,返回虚拟DOM(Virtual DOM)。
  • 处理动态绑定阶段会将具有动态绑定的节点与对应的响应式数据建立关联,当数据发生变化时,会触发重新渲染的过程。
  1. 创建实例:通过Vue构造函数创建组件实例,并初始化相关属性和事件。

  2. 数据响应式:Vue使用双向绑定机制,在数据发生变化时自动更新对应的视图。在渲染过程中,Vue会为每个响应式数据对象设置侦听器,当数据发生改变时,会触发重新渲染的过程。

  3. 渲染虚拟DOM:Vue根据渲染函数生成虚拟DOM(Virtual DOM),虚拟DOM是一种轻量级的JavaScript对象,用于表示真实的DOM结构。

Diff算法会逐层比较新旧虚拟DOM树的节点,找出需要更新的节点。
使用key来唯一标识节点,可以帮助Diff算法更准确地找出差异。

  1. Diff算法:在重新渲染之前,Vue会进行虚拟DOM的比对,通过Diff算法找出需要更新的部分。Diff算法会高效地找出差异,并最小化DOM操作,提高渲染性能。

  2. 应用更新:根据Diff算法的结果,Vue将只更新需要修改的部分DOM节点,而不是重新渲染整个视图。这样可以减少不必要的计算和DOM操作,提高性能。

  3. 更新后钩子:在完成DOM更新后,Vue会触发相应的生命周期钩子函数,如updated,供开发者进行后续操作或处理副作用。

以上是Vue 2的简要渲染过程,通过将模板解析成渲染函数、创建实例、生成虚拟DOM以及更新差异等步骤,Vue能够高效地实现数据驱动的视图更新。

vue3渲染过程

在Vue 3中,渲染过程主要包括以下几个步骤:

  1. 解析模板:Vue 3使用编译器将模板解析成渲染函数,这是在构建阶段完成的。渲染函数可以理解为一个JavaScript函数,用于生成虚拟DOM。

  2. 创建响应式数据:Vue 3使用reactive()函数对数据进行响应式处理。该函数会将数据转换成响应式对象,使得当数据发生变化时,能够触发视图的重新渲染。

  3. 初始化组件实例:在创建组件实例时,Vue 3会执行一系列初始化操作,包括设置组件的初始状态、注入依赖项等。

  4. 渲染虚拟DOM:调用渲染函数生成虚拟DOM(VNode)。虚拟DOM是一个轻量级的JavaScript对象,它描述了要渲染到页面上的元素及其属性。

  5. 比较与更新:Vue 3通过算法优化,将新旧虚拟DOM进行比较,找出两者之间的差异。这个过程称为虚拟DOM diff。然后,根据差异进行有针对性地更新。

  6. 生成真实DOM:根据最新的虚拟DOM,Vue 3会进行真实DOM的创建或更新。

  7. 将真实DOM插入页面:在更新完真实DOM后,Vue 3将其插入到页面中,用户最终看到的就是这个经过更新的页面。

  8. 监听数据变化:在组件实例被挂载到页面上后,Vue 3会自动建立数据的观察者机制,当数据发生变化时,会通知相关依赖进行重新渲染。

优化和扩充

在Vue 3的渲染过程中,除了上述提到的步骤,还有一些优化和扩充的内容:

  1. 编译优化:Vue 3使用了静态模板提升(Static Template Hoisting)的技术,将静态节点转换成常量,在渲染过程中减少不必要的计算。这样可以降低虚拟DOM的生成和比对过程的开销,提高性能。

  2. 标记优化:Vue 3引入了递增式的静态标记(Incremental Static Marking),通过分层次、增量式的标记方式,将模板标记为可静态节点、需要动态跟踪的节点以及可能产生动态内容的节点,进一步减少不必要的更新操作。

  3. 静态提升:Vue 3可以将静态节点进行提升,从而避免重复创建和比对。这意味着在重新渲染时,Vue 3可以直接复用之前生成的静态节点,而无需重新生成和比对。

  4. Fragments:Vue 3支持Fragments(片段),可以在组件内部渲染多个根级别的元素,而无需包裹额外的父级元素。这样可以更灵活地组织组件的结构。

  5. Suspense:Vue 3引入了Suspense机制,用于处理异步组件的渲染。通过Suspense可以在异步组件加载中显示自定义的等待界面,提升用户体验。

  6. Teleport:Vue 3提供了Teleport(传送门)功能,可以将组件的内容渲染到DOM结构的其他位置,而不受组件嵌套层次的限制。这在处理模态框、弹出菜单等场景下非常有用。

Vue 3在渲染过程中进行了多方面的优化,包括编译优化、标记优化、静态提升等,以提升整体性能。此外,还引入了一些新特性如Fragments、Suspense和Teleport,为开发者提供了更加灵活和便利的渲染方式。

vue2和vue3对比

Vue 3通过使用静态模板提升、编译时优化等技术手段,使得整个渲染过程更为高效,并且相较于Vue 2有更好的性能表现。同时,Vue 3还引入了递增式的静态标记,可以进一步减少不必要的更新操作,提升渲染性能。

Vue 3的渲染过程包括解析模板、创建响应式数据、初始化组件实例、渲染虚拟DOM、比较与更新、生成真实DOM、将真实DOM插入页面和监听数据变化等环节。通过对比新旧虚拟DOM的差异,Vue 3能够高效地更新页面,并提供响应式的数据绑定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/30023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8s 部署 Apache Kudu 集群

一、K8s 部署 Apache Kudu 集群 安装规划 组件replicaskudu-master3kudu-tserver3 1. 创建命名空间 vi kudu-ns.yamlapiVersion: v1 kind: Namespace metadata:name: apache-kudulabels:name: apache-kudukubectl apply -f kudu-ns.yaml查看命名空间: kubectl …

JUC高级-0614

5.LockSupport与线程中断 5.1 线程中断 蚂蚁金服面试题:如何中等一个线程,如何停止一个线程什么是中断机制 首先:一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.…

【spring源码系列-06】refresh中obtainFreshBeanFactory方法的执行流程

Spring源码系列整体栏目 内容链接地址【一】spring源码整体概述https://blog.csdn.net/zhenghuishengq/article/details/130940885【二】通过refresh方法剖析IOC的整体流程https://blog.csdn.net/zhenghuishengq/article/details/131003428【三】xml配置文件启动spring时refres…

十个实用MySQL函数

函数 0. 显示当前时间 命令:。 作用: 显示当前时间。 应用场景: 创建时间,修改时间等默认值。 例子: 1. 字符长度 命令:。 作用: 显示指定字符长度。 应用场景: 查看字符长度时。 例子: 2. 日期格式化 命令…

面试---简历

项目 1.1、商品管理 新增商品 同时插入商品对应的使用时间数据,需要操作两张表:product,product_usetime。在productService接口中定义save方法,该方法接受一张Dto对象,dto对象继承自product类,并将prod…

Stable Diffusion webui 基础参数学习

哈喽,各位小伙伴们大家好,最近一直再研究人工智能类的生产力,不得不说随着时代科技的进步让人工智能也得到了突破性的发展。而小编前段时间玩画画也是玩的不可自拔,你能想想得到,一个完全不会画画的有一天也能创作出绘…

【测试基础01】

软件测试 一、软件测试基本概念(1)、软件测试的定义(2)、软件错误的定义(3)、测试分类 二、需求文档的评审三、软件测试计划(1)、测试范围(2)、测试环境(3)、测试策略(4)、测试管理(5)、测试风险(6)、模板 一、软件测试基本概念 (1)、软件测试的定义 软件测试是从前期需求文档…

freeswitch 使用 silero-vad 静音拆分使用 fastasr 识别

silero-vad 在git 的评分挺高的测试好像比webrtc vad好下面测试下 silero-vad 支持c 和py 由于识别c的框架少下面使用py 以下基于python3.8torch1.12.0torchaudio 1.12.0 1.由于fastasr 需要16k 所以 将freeswitch的实时音频mediabug 8k转成16k 用socket传到py 模块代码…

ChatGLM-6B 在 ModelWhale和本地 平台的部署与微调教程

ChatGLM-6B 在 ModelWhale 平台的部署与微调教程 工作台 - Heywhale.com ChatGLM-6B 介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费…

高压放大器在介电材料测试中的应用

介电材料测试是一项重要的材料性能测试,它涉及到物理学、化学、材料科学等多个学科领域。高压放大器是介电材料测试中的一种重要设备,它可以放大微弱的电信号,提高测试的准确性和精度。下面将详细介绍高压放大器在介电材料测试中的应用。 图&…

Web前端开发技术储久良第三版课后选择答案(1-10章)

P16-第1章 练习与实验答案 练习1 1.选择题 【1】Html是一种()语言。 【A】编译型 【B】超文本标记 【C】高级程序设计 【D】面向对象编程【2】世界上第一个网页是()。 【A】http://www.w3c.org 【B】http:/info.cern.ch 【C】http://www.microsoft.com…

【论文阅读】(2023.06.09-2023.06.18)论文阅读简单记录和汇总

(2023.06.09-2023.06.12)论文阅读简单记录和汇总 2023/06/09:虽然下周是我做汇报,但是到了周末该打游戏还是得打的 2023/06/12:好累好困,现在好容易累。 目录 (TCSVT 2023)Facial Image Compression via …

2021电工杯数学建模B题解题思路

目录 一、前言 二、问题背景 三、具体问题 四、解题思路 (一)整体思路 (二)问题一 (三)问题二 (四)问题三 (五)问题四 (六)…

使用parcel搭建threejs开发环境

一、什么是parcel parcel官网:https://www.parceljs.cn/ Parcel是一个快速、零配置的Web应用打包器,可将JavaScript、CSS、HTML和图像等静态文件打包到一个捆绑文件中。它的主要目标是简化Web应用程序的打包过程,使开发人员可以更快速地创建…

【深度学习】1 感知机(人工神经元)

认识感知机 感知机接收多个输入信号,输出一个信号 感知机的信号只有“流/不流”(1/0)两种取值 0对应“不传递信号”,1对应“传递信号”。 输入信号被送往神经元时,会被分别乘以固定的权重。神经元会计算传送过来的信号的综合,只有…

怎么利用代理IP优化网络爬虫

网络爬虫会自动扫描互联网,搜集大量数据并将它们组织起来。但是,许多网站都采取了反爬虫策略,限制了网络爬虫的活动。这时候,代理IP就起到了关键作用。 一、代理ip在网络爬虫中的作用 代理ip爬虫中使用代理IP有很多好处。首先&…

OpenCV 笔记_3

文章目录 笔记_3直方图匹配(直方图规定化) 主要针对单通道图像模板匹配matchTemplate 模板匹配函数 图像卷积filter2D 卷积函数 过滤器图像噪声的产生cvflann::rand_double 产生随机浮点数在(0~1)之间cvflann::rand_int 产生随机整数在(0~RAN…

golang实现webgis后端开发

目录 前言 二、实现步骤 1.postgis数据库和model的绑定 2.将pg库中的要素转换为geojson (1)几何定义 (2)将wkb解析为几何类型 (3)定义geojson类型 (4)数据转换 (5)数据返回 2.前端传入的geojson储存到数据库 3、其他功能实现 总结 前言 停更了…

系列二、RuoYi前后端分离(登录密码加密去除公钥)

一、问题描述 系列一虽然实现了登录时密码加密,但是/getPublicKey返回的结果中,把私钥也返回了,这样显然是不合理的,如下: 二、后端代码修改 2.1、RSAUtil package com.tssl.business.utils;import org.apache.comm…

【自监督论文阅读 2】MAE

文章目录 一、摘要二、引言2.1 引言部分2.2 本文架构 三、相关工作3.1 Masked language modeling3.2 Autoencoding3.3 Masked image encoding3.4 Self-supervised learning 四、方法4.1 Masking4.2 MAE encoder4.3 MAE decoder4.4 Reconstruction target 五、主要实验5.1 不同m…