前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

虚拟DOM(一)

首页
2018-10-20 22:12:12
Front-End
JavaScript虚拟DOM

# 一、什么是 vdom

  • 用 JS 模拟 DOM 结构
  • DOM 变化的对比,放在 JS 层来做
  • 提高重绘性能

# 二、设计一个需求场景

用jQuery实现

遇到的问题

  • DOM 操作是“昂贵”的,js 运行效率高
  • 尽量减少 DOM 操作,而不是“推倒重来”
  • 项目越复杂,影响就越严重
  • vdom 即可解决这个问题

# 三、vdom 的如何应用,核心 API 是什么

什么是 vdom

介绍 snabbdom

介绍 snabbdom - h 函数

介绍 snabbdom - patch 函数

重做jQuery的demo

  • 使用 data 生成 vnode
  • 第一次渲染,将 vnode 渲染到 #container 中
  • 并将 vnode 缓存下来
  • 修改 data 之后,用新 data 生成 newVnode
  • 将 vnode 和 newVnode 对比

核心 API

  • h(‘<标签名>’, {…属性…}, […子元素…])
  • h(‘<标签名>’, {…属性…}, ‘….’)
  • patch(container, vnode)
  • patch(vnode, newVnode)

# 四、介绍一下 diff 算法

# 4.1 vdom 为何使用 diff 算法

  • DOM 操作是“昂贵”的,因此尽量减少 DOM 操作
  • 找出本次 DOM 必须更新的节点来更新,其他的不更新
  • 这个“找出”的过程,就需要 diff 算法

patch(container, vnode)

演示过程

# 4.2 diff 实现过程

  • patch(container, vnode) 和 patch(vnode, newVnode)
  • createElment
  • updateChildren
fe
  • 一、什么是 vdom
  • 二、设计一个需求场景
  • 三、vdom 的如何应用,核心 API 是什么
  • 四、介绍一下 diff 算法
    • 4.1 vdom 为何使用 diff 算法
    • 4.2 diff 实现过程

← 虚拟DOM(二)jQuery的deferred对象详解 →