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能够高效地更新页面,并提供响应式的数据绑定。文章来源地址https://www.toymoban.com/news/detail-496835.html

到了这里,关于vue2和vue3的渲染过程简述版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue2 第五节 class与style绑定,条件渲染和列表渲染

    1.class与style绑定 2.条件渲染 3.列表渲染 (1)绑定class 就是用v-bind绑定一个class 有三种不同的写法 1. 字符串写法:适用于样式的类名不确定,需要动态指定    2.数组写法:适用于要绑定的个数个名字都不确定,数组中的样式连同class里面有的样式都会绑定到div中    3. 对象写

    2024年02月15日
    浏览(32)
  • Vue2 - 模板、渲染、事件处理、表单输入绑定

    本文内容来自:https://www.bilibili.com/video/BV1Rs4y127j8/ 1、文本 数据绑定最常见的形式就是使用“Mustache” (双大括号) 语法的文本插值 一般配合 js 中的 data() 设置数据 2、原始 HTML 双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令 3、

    2024年02月16日
    浏览(36)
  • vue2使用 element表格展开功能渲染子表格

     默认样式 修改后   样式2 模拟数据 修改默认样式 

    2024年01月17日
    浏览(46)
  • Vue2技能树(3)-声明式渲染、指令大全、生命周期函数

    👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! Vue2技能树(1)-介绍、导入使用、响应式数据绑定、组件化开发 vue2技能树(2)-模板语法、vue的工具链、渐进式框架 Vue2技能树(3)-声明式渲染、指令大全、生命周

    2024年02月07日
    浏览(49)
  • vue2+vue3——42+

    vue2 v-cloak指令【14:14】 调网速 : no throttling 不让慢 ; offline 断网 JS 阻塞 红色 外部JS ; 绿色 网页核心 ; 粉色 JS 脚本 红色 外部JS 我要走不了, 谁都别想走 : 绿色 不可以渲染到页面,放到页面容器 ; 粉色 JS脚本 不可以被执行 ,没有容器 换位置: body 最下方 v-cloak 本质

    2024年02月02日
    浏览(102)
  • vue3对比vue2

    使用vite创建vue项目 什么是vite? 新一代前端构建工具 优势如下: 开发环境中,无须打包操作,可快速的冷启动 清亮快速的热重载 真正的按需编译,不在等待整个应用编译完成 注意,vite初始化后需要你手动安装一下node_modules vue3中的根标签可以不止一个 vue2就不行 setup vue3中一个新的

    2024年02月08日
    浏览(36)
  • vue2和vue3

    1. 双向数据绑定原理发生了改变 vue2的双向数据绑定是利用了es5 的一个API Object.definepropert() 对数据进行劫持 结合发布订阅模式来实现的。vue3中使用了es6的proxyAPI对数据进行处理。 相比与vue2,使用proxy API 优势有:defineProperty只能监听某个属性,不能对全对象进行监听;可以省

    2024年02月12日
    浏览(34)
  • vue2和vue3的区别(Vue3升级部分)

    区别有两个目的:一面试说一下书面化的表达,二工作需要升级大白话说一下项目应用的区别。 双向数据绑定: vue2 的双向数据绑定是利⽤ES5 的⼀个 API ,Object.defineProperty()对数据进⾏劫持 结合 发布订阅(gettersetter)模式的⽅式来实现的。 vue3 中使⽤了 ES6 的 ProxyAPI 对数据

    2024年02月12日
    浏览(43)
  • vue3和vue2区别

    在 Vue 2 中,使用了 Object.defineProperty 来实现数据的响应式。它通过逐个定义对象属性的方式来进行数据的劫持和监听。这种方式存在一些限制,例如无法监听新增的属性,需要使用 Vue 提供的 $set 方法来实现响应式。此外,由于需要逐个定义属性,对于大型对象或数组的性能

    2024年01月17日
    浏览(42)
  • 关于vue2与vue3

    vue是组件化开发框架,所以对于vue应用来说组件间的数据通信非常重要。 1. 组件通信常用方式有以下8种: props $emit/ $on $children /$parent $attrs/ $listeners ref $root eventbus vuex 注意vue3中废弃的几个API 在vue3中废除$children 移除$listeners $on、$off和$once实例方法被移除 2.根据组件之间关系讨

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包