什么是Virtual DOM?

所谓virtual,指的是对真实DOM的一种模拟。相对于直接操作真实的DOM结构,我们构建一棵虚拟的树,将各种数据和操作直接应用在这棵虚拟的树上,然后再将对虚拟的树的修改应用到真实的DOM结构上。

这样有以下好处:可能会减少DOM操作次数,带来性能上的提升,即使我们频繁操作虚拟DOM,我们只需要一定时刻一次性同步修改到真实DOM上即可

真实的HTML节点有两百多个属性和方法,使用虚拟节点,能在数据结构上节省内存。

虚拟DOM不依赖浏览器环境,能在node环境实现,可以使用虚拟DOM生成html字符串,实现SSR

使用新的数据结构表示HTML节点

尝试在控制台打印一个HTML节点的所有属性和方法,我们会发现HTML节点是一个非常巨大的数据结构。

HTMLElement由两百多个属性和方法

而90%以上的属性和方法我们并不关心。

对Element节点的表示

所以我们可以尝试用下面的结构表示Element节点。export default class VNode {

constructor(tagName, attrs, children) {

this.tagName = tagName

this.attributes = attrs

this.children = children

}

}

那么对于:

我们就能用VNode('div', {class: 'container'}, [])来表示了。

然后我们为VNode添加render方法,实现向真实节点的转换。class VNode {

constructor(tagName, attrs, children) {

this.tagName = tagName

this.attributes = attrs

this.children = children

}

render() {

let element = document.createElement(this.tagName)

Object.keys(this.attributes).forEach(key => {

element.setAttribute(key, this.attributes[key])

})

this.children.forEach(child => {

element.appendChild(child.render())

})

return element

}

}

对于Text节点的表示

对于text节点,暂时只关心文本内容class TextNode {

constructor(content) {

this.content = content

}

render() {

return document.createTextNode(this.content)

}

}

在对上面两种节点的改造下,我们尝试表示一下html:

image.pnglet virtualDom = new VNode('div', {class: 'container'}, [

new TextNode('some content'),

new VNode('span', {}, [

new TextNode('other content')

])

])

作者:浩神

来源:简书

传递HTML字符串virtual,理解Virtual DOM(1) 真实DOM和虚拟DOM的映射相关推荐

  1. virtual DOM和真实DOM的区别_让虚拟DOM和DOMdiff不再成为你的绊脚石

    来源 | https://juejin.im/post/5c8e5e4951882545c109ae9c Keep Moving 时至今日,前端对于知识的考量是越来越有水平了,逼格高大上了 各类框架大 ...

  2. 面试官:什么是虚拟DOM?如何实现一个虚拟DOM?

    故心故心故心故心小故冲啊 文章目录 一.什么是虚拟DOM 二.为什么需要虚拟DOM 三.如何实现虚拟DOM 小结 参考文献 一.什么是虚拟DOM 虚拟 DOM (Virtual DOM )这个概念相信 ...

  3. 说说真实dom和虚拟dom有什么区别,虚拟dom的优势是什么?

    区别:虚拟dom不会进行排版与重绘操作,而真实dom会频繁的排版+重绘,而虚拟dom的总损耗是虚拟dom+真实dom的增删改+排版重绘,而真实dom的总损耗是dom的完全增删改+排版重绘 虚拟dom的 ...

  4. 深入理解React(一)JSX与虚拟DOM

    初衷 使用 React 有一段时间了, 一直想找个时间写一个 React 的系列文章.忙里抽闲,完成了第一篇.写这系列文章的初衷是总结这段时间的技术学习,以及给那些想学习 React 的同学们一点帮助 ...

  5. Vue进阶之Virtual DOM(虚拟DOM) 实现原理

    Vue进阶之Virtual DOM(虚拟DOM) 实现原理 Virtual DOM(虚拟 DOM),是由普通的 JS 对象来描述 DOM 对象,因为不是真实的 DOM 对象,所以叫 Virtual D ...

  6. Vue 源码学习—Virtual DOM(虚拟 DOM)

    Virtual DOM Virtual DOM是什么 真实DOM成员 引入原因 作用 Virtual DOM是什么 定义: 普通的js对象来描述DOM对象,不是真实的DOM,顾名思义,称为虚拟DOM ...

  7. 虚拟dom (virtual dom)(vnode)

    1.什么是虚拟 DOM (vdom) 起源 虚拟dom最先是由facebook团队提出的,最先运用在react中,之后在vue2.0版本中引入了虚拟DOM的概念 是什么 虚拟 dom 是相对于浏览器所 ...

  8. 第九篇:真正理解虚拟 DOM:React 选它,真的是为了性能吗?

    在过去的十年里,前端技术日新月异.从最早的纯静态页面,到 jQuery 一统江湖,再到近几年大火的 MVVM 框架--研发模式升级这件事情对于前端来说,好像成了某种常态.其实研发模式不断演进的背后,恰 ...

  9. React:真正理解虚拟DOM

    在mvvm这个框架领域,到现在仍然存在一个及其热门的面试问题:为什么要使用虚拟DOM? 一般的回答如下: 本文将通过另一个视角,给出不同的答案,本文不局限于点对点看待问题本硕本身,而是放在一个足够长的 ...

最新文章

  1. 《LeetCode力扣练习》第64题 最小路径和 Java
  2. 《团队-团队编程项目作业名称-团队信息》
  3. Oracle单机报监听不支持服务,(转)oracle 启动监听 报“监听程序不支持服务” 解决...
  4. Win11开始大范围推送!
  5. Spring Boot2.0+中,自定义配置类扩展springMVC的功能
  6. 带你自学Python系列(二):Python列表总结-思维导图
  7. 12. 我的第一个容器化应用
  8. 你不能强迫别人进步,跟别人没法强迫你进步一样
  9. 计算机毕业设计-SSM在线视频教育网站-JavaWeb在线视频教育网站
  10. Zookeeper分布式锁解决羊群效应的方案
  11. Android怎么实现解压文件,Android如何实现压缩和解压缩文件
  12. 一次多线程耗尽优化与处理
  13. Linux下Netfilter创建自己的Hook,让数据包可以发送到用户层,然后统计节点负载信息
  14. ble4.2空口包详解(air interface packets)
  15. 雨润莲心:同幽梦、共红尘
  16. 笔试——大华FPGA
  17. 解答:显示器能显示画面,但是一闪一闪是什么原因
  18. 2018.11~2019.4马拉松训练计划
  19. 关于在Cocos-creator中使用微信小程序的api
  20. java实现读取excel表格中的数据,兼容xls和xlsx

热门文章

  1. 95-850-020-源码-心跳-JobMaster与TaskExecutor之间的心跳检测
  2. 【Flink】Flink 写入 kafka 报错 The server disconnected before a response was received
  3. 【Elasticsearch】 es join 多表关联如何设计
  4. 60-400-240-使用-binlog-Canal使用文档md
  5. 【Kafka】 kafka集群升级导致broker.id发生变动变动引起的问题
  6. 【MySQL】MySQL每秒统计一次showglobal status
  7. 【hadoop】java.io.IOException: No FileSystem for scheme: hdfs
  8. eclipse spring mysql,eclipse环境下的springboot框架+mybatis访问MySQL报错空指针
  9. SpringBoot + SpringBatch + Quartz整合定时批量任务
  10. Redis中两种持久化机制RDB和AOF