HsuMoonHao HsuMoonHao
首页
  • 前端文章

    • JavaScript
    • 数据结构与算法
  • vue3相关

    • 《JavaScript教程》
GitHub (opens new window)

HsyMoonHao

前端界的小学生
首页
  • 前端文章

    • JavaScript
    • 数据结构与算法
  • vue3相关

    • 《JavaScript教程》
GitHub (opens new window)
  • 前端-设计模式

  • js数据结构与算法

  • js程序设计

  • vue3相关

    • 01.虚拟Dom与diff算法
      • 计算属性
      • watch 侦听器
      • watchEffect高级侦听器
      • 组件和生命周期
      • bem架构
      • 父子组件传值
      • slot插槽
      • provide和inject
      • v-model
      • 自定义指令
      • 自定义hooks
    • 微前端

    • react

    • 前端
    • vue3相关
    HsyMoonHao
    2023-05-10
    目录

    01.虚拟Dom与diff算法

    # 虚拟DOM

    虚拟DOM其实一种通过js生成的AST的节点树,也可以称为真正的树形结构。
    在这之前我们还要了解什么是dom树,下面是浏览器解析页面时的流程:

    1. 解析html:解析html文档,并构建dom树; // DOM 树表示 HTML 文档中元素之间的层次关系。
    2. 解析css:解析css样式,并构建cssom树; // CSSOM 树表示样式之间的层次关系和作用范围。
    3. 生成渲染树:浏览器将dom树喝cssom树合并,生成渲染树,渲染树包含了所有需要渲染的元素以及元素的样式信息;但不包含不需要渲染的元素;
    4. 布局:浏览器遍历渲染树,计算每个元素的位置和大小等布局信息,生成布局树;
    5. 绘制:浏览器遍历布局树,将每个元素绘制到屏幕上,生成位图;
    6. 合成:浏览器将位图按照z-index顺序合成图层,最终显示在屏幕上。
    
    1
    2
    3
    4
    5
    6

    如果使用原生js或者jq的操作dom的话,每次都会引发dom的重流与重绘。
    虚拟dom就是为了解决这个问题而出现的,对比每次更新(diff)的内容,然后更新的节点内容更新到dom上。
    所以,用 JS 对象模拟 DOM 节点的好处是,页面的更新可以先全部反映在 JS 对象(虚拟 DOM )上,操作内存中的 JS 对象的速度显然要更快,等更新完成后,再将最终的 JS 对象映射成真实的 DOM,交由浏览器去绘制。

    # diff算法

    Virtual DOM 渲染成真实的 DOM 实际上要经历 VNode 的定义、diff、patch 等过程; 这些过程要么保留原始节点,要么移动节点。

    编辑 (opens new window)
    上次更新: 2023/05/10, 23:36:10
    Javascript程序设计
    计算属性

    ← Javascript程序设计 计算属性→

    最近更新
    01
    Async和Defer
    01-03
    02
    typescript utils
    12-23
    03
    对SPA的理解
    05-29
    更多文章>
    Theme by Vdoing | Copyright © 2023-2024 HsyMoonHao | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式