美文网首页
Vue 渲染机制

Vue 渲染机制

作者: skoll | 来源:发表于2023-04-01 22:23 被阅读0次

虚拟DOM

1 .将UI结构通过数据结构虚拟的表示出来,保存在内存中,然后让真实的DOM与之保持同步.
2 .挂载:遍历整个虚拟Dom,根据这个构建真实的DOM树。
3 .更新:diff新旧虚拟dom树,找出他们之间的区别,并应用这其中的变化到真实的DOM上

默认模版的好处

1 .更贴近真实的HTML
2 .可以让我们更方便的复用已有的HTML代码片段.我觉得这个不算,复用的最优先解永远是组件,而不是复制代码块
3 .有更好的访问性体验
4 .更方便的使用css应用样式
5 .语法确定,可以方便的对模版做静态分析
6 .Vue的模版编译器可以应用许多编译时优化来提升虚拟DOM的性能表现

1 .react 虚拟DOM是运行时的,每次更新无法预知新的DOM树,所以需要遍历整颗DOM树,比较每个vnode上的props来确保正确性。
2 .即使一棵树的某个部分没有改变,还是会在每次重渲染的时候创建新的vnode,带来了大量不必要的内存压力。是一个暴力的更新过程
3 .在vue找那个,框架可以同时运行编译器和运行时,编译器可以静态分析模版并在生成代码中留下标记,使得运行时尽可能走捷径。
4 .静态提升部分
<div>
  <div>foo</div> <!-- 需提升 -->
  <div>bar</div> <!-- 需提升 -->
  <div>{{ dynamic }}</div>
</div>
foo,bar这俩是完全静态的,重新渲染的时候会自动提升这部分vnode创建函数到这个模版的渲染函数之外,每次渲染的时候都使用这份相同的vnode,渲染器知道新旧vnode在这部分是完全相同的,会完全跳过对他们的差异对比所以这个还不在外面,还是复用的不彻底,应该是可以完全使用原来的dom,而不是仅仅复用vnode

4.2 当有足够多的静态元素的时候,还会压缩为一个静态vnode,包含这些节点相应的纯html字符串。这些节点就会直接通过innerHtml来挂载,同时还会在初次挂载后缓存相应的DOM节点,如果这部分内容在应用中被其他地方重用,会使用cloneNode方法来克隆新的DOM节点,会非常高效
image.png

4.3 .更新类型标记

1 .对于有单个动态绑定的元素来说,可以在编译时推断出一些信息
<!-- 仅含 class 绑定 -->
<div :class="{ active }"></div>

<!-- 仅含 id 和 value 绑定 -->
<input :id="id" :value="value">

<!-- 仅含文本子节点 -->
<div>{{ dynamic }}</div>
1 .在对这些元素生成渲染函数时,Vue在vnode创建调用中直接编码了每个元素所需的更新类型
createElementVNode("div", {
  class: _normalizeClass({ active: _ctx.active })
}, null, 2 /* CLASS */)
2 .这里的2就是更新标记类型,Vue能够在更新带有动态绑定的元素时做最少得操作

4.4 树结构打平.主要是为了便于上面的编译优化

<div> <!-- root block -->
  <div>...</div>         <!-- 不会追踪 -->
  <div :id="id"></div>   <!-- 要追踪 -->
  <div>                  <!-- 不会追踪 -->
    <div>{{ bar }}</div> <!-- 要追踪 -->
  </div>
</div>
//比如上面的结构

div (block root)
- div 带有 :id 绑定
- div 带有 {{ bar }} 绑定
// 会是这样的结构,里面仅仅包含所有动态的后代节点

4.5 当组件需要重新渲染的时候,只需要遍历这个带有动态节点的数组,不需要遍历全部dom节点
4.6 模版中任何静态部分都会被高效的略过.为啥还是会有diff虚拟dom的操作呢
5 .对SSR 激活的影响

1 .单个元素的激活可以基于相应vnode 的更新类型标记走更快的捷径
2 .在激活时只有区块节点和其动态子节点需要被遍历,这在模版层面上实现更高效的部分激活

相关文章

  • 【Vue3.0】- 响应式

    响应式原理 响应式是 Vue.js 组件化更新渲染的一个核心机制 Vue2.x响应式实现 Object.defin...

  • 前端遇到的面试题

    1、浏览器渲染过程、渲染机制 2、宏任务、微任务 3、vuex刷新页面为什么会丢失数据,如何解决 4、vue双向绑...

  • 2019-03-09 Vue基础知识

    Vue2.x 模板语法,条件渲染,列表渲染渲染 Vue2.x Router,Vuex 集成Vue2.x Vue2....

  • vue源码之数据响应式原理

    vue 简介 渐进式框架:就是把框架分层。最核心的是视图层渲染,然后往外是组件机制,在这个基础上加入路由机制,再加...

  • nextTick和异步更新视图

    加深vue渲染页面原理记录 1. 栗子 先来了解一个例子关于vue中数据和DOM更新机制以及vm.nextTick...

  • MVVM及Vue渲染机制探索

    MVVM - Model View ViewModel 总所周知,Vue是目前比较流行的MVVM前端框架,其核心在...

  • 离屏渲染

    离屏渲染 一、渲染机制 GPU渲染机制: CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧...

  • Android UI卡顿原因及解决办法

    渲染机制介绍 为了分析UI卡顿,我们有必要理解一下渲染机制,这套渲染机制适用于绝大部分的屏幕渲染,其中包括Andr...

  • Android 性能优化之旅4--UI卡顿分析

    渲染机制介绍 为了分析UI卡顿,我们有必要理解一下渲染机制,这套渲染机制适用于绝大部分的屏幕渲染,其中包括Andr...

  • Vue 快速上手(实例)

    Vue 快速上手 实例1: 渲染声明 渲染声明是 vue 的最核心模块。 vue 基于传统的 HTML 模板语法,...

网友评论

      本文标题:Vue 渲染机制

      本文链接:https://www.haomeiwen.com/subject/xqzkddtx.html