亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

virtual dom (虛擬dom)

標簽:
JavaScript

1. 用js模拟dom结构。

2. 通过 js计算 减少 dom操作,节省性能

  1. 浏览器中,js与dom的实现是分离的,js操作dom相当于两个模块做交互

  2. 最主要的原因,dom操作会导致浏览器重排与重绘

相对于传统方案全部删除重新渲染,vdom可以做修改前后对比,点对点的更新dom,避免任何多余的dom渲染。

此需求:实现基于数据的修改,实时更新表格。

3. vdom库 snabbdom API

  • h():创建虚拟dom

     var vnode = h('div', {style: {color: '#000'}}, [
       h('h1', 'Headline'),
       h('p', 'A paragraph'),
     ]);
  • patch(node|vnode,newVnode):

  1. 如果第一个参数为node,则把node替换成vnode的结构;

  2. 如果第一个参数为vnode,则对比差异后把 旧vnode 更新 为新vnode。
    注意: 如果第一个参数为vnode,那它必须是patch过的vnode***

tovnode(node,vnode): 基于vnode更新已经存在的node

4. diff算法

  • 用来对比差异的算法,有 linux命令 diff、git命令git diff、可视化diff(github、gitlab...)等各种实现。

5. 简单过程

  • 首次渲染:patch(node,vnode),同时vnode节点会和真实dom节点做关联

  • 更新 patch(vnode,newVnode)

    • 遍历vnode,通过diff算法对比,相同则递归对比,不同则通过关联找到并修改真实节点

    • 上述只是节点修改,还会有节点新增删除、节点重新排序、节点样式属性事件更新、性能优化等等复杂情况。



作者:漓漾li
链接:https://www.jianshu.com/p/c815056d4b35


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消