42

虚拟DOM(一)

 5 years ago
source link: http://blog.poetries.top/2018/10/20/vdom-base/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

YJFjQ3f.png!web

用jQuery实现

j2eIjaz.png!webieiimua.png!webBzymE3r.png!web

遇到的问题

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

mQFRBfA.png!web

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

什么是 vdom

7byu6vR.png!web

介绍 snabbdom

e67FFjA.png!web

6B3yYfE.png!web

介绍 snabbdom - h 函数

aaYVNjm.png!web

介绍 snabbdom - patch 函数

uMfMBny.png!web

重做jQuery的demo

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

6Jzieea.png!web

核心 API

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

四、介绍一下 diff 算法

4.1 vdom 为何使用 diff 算法

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

6RzyMrF.png!web

patch(container, vnode)

vyyQNn6.png!web

FF3aIfa.png!web

演示过程

qAZvmya.png!web

3mai6jR.png!web

fiIrMfF.png!web

NfEBBvq.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK