一、Virtual DOM
Virtual DOM是一个JavaScript对象,v8引擎使得js可以高效运行,而直接操作DOM很慢。
Virtual DOM本质上就是在JS和DOM之间做了一个缓存。可以类比CPU和硬盘,既然硬盘这么慢,我们就在它们之间加个缓存;既然DOM这么慢,我们就在JS和DOM之间加个缓存。CPU(JS)只操作内存(Virtual DOM),最后的时候再把变更写入硬盘(DOM)。
二、Virtual DOM算法
Virtual DOM算法主要做3件事:
1、用js对象模拟dom树生成Virtual DOM树,把真正的dom树插入文档;
2、状态变更时,重新构造一个对象树,对比新旧两棵树、记录差异;
3、把记录的差异应用在真正的dom树上,更新视图。
其中,对比两棵树的差异,即Virtual DOM的diff算法,一旦数据变化,针对性的对局部视图做调整,而不是变更整个dom树。两棵树的完全diff算法时间复杂度为n的3次方,O(n^3),一般情况下是O(n),因为Virtual DOM只比较同级节点,记录差异,采用深度优先遍历。

三、组件性能优化
react组件性能优化,每次setState方法的调用都会重绘整个子树。如果你想优化性能,那么尽量在较“低”的节点上调用setState方法,或者自己实现shouldComponentUpdate方法来阻止整个子树的重绘。

四、参考链接

http://www.w3cplus.com/javascript/understand-the-Virtual-DOM.html
http://www.w3cplus.com/javascript/Virtual-DOM-diff.html

https://hulufei.gitbooks.io/react-tutorial/content/index.html

http://www.jianshu.com/p/83bda9cd8c67

https://reactjs.org/

https://github.com/facebook/react

五、虚拟dom和createDocumentFragment的区别

都是把多次DOM操作做一个批处理,只是前者建立在创建元素节点上,容易修改。后者建立一个片段,就是一次性使用,不方便修改。

react的Virtual DOM的更多相关文章

  1. 深入理解 React 的 Virtual DOM

    React在前端界一直很流行,而且学起来也不是很难,只需要学会JSX.理解State和Props,然后就可以愉快的玩耍了,但想要成为React的专家你还需要对React有一些更深入的理解,希望本文对你 ...

  2. React的Virtual DOM厉害了

    React 的伟大之处就在于,提出了Virtual DOM这种新颖的思路,并且这种思路衍生出了React Native,有可能会统一Web/Native开发. 在性能方面,由于用到了Virtual D ...

  3. React:关于虚拟DOM(Virtual DOM)

    Virtual DOM 是一个模拟 DOM 树的 JavaScript 对象. React 使用 Virtual DOM 来渲染 UI,当组件状态 state 有更改的时候,React 会自动调用组件 ...

  4. React Virtual DOM Explained in Simple English

    If you are using React or learning React, you must have heard of the term “Virtual DOM”. Now what is ...

  5. React virtual DOM explained in simple English/简单语言解释React的虚拟DOM

    初学React,其中一个很重要的概念是虚拟DOM,看了一篇文章,顺带翻译一下. If you are using React or learning React, you must have hear ...

  6. 个人对于Virtual DOM的一些理解

    之前一直认为react的Virtual DOM操作会比传统的操作DOM要快,这其实是错误的,React 从来没有说过 "React 比原生操作 DOM 快".如果没有 Virtua ...

  7. 【转】Virtual DOM

    前言 React 好像已经火了很久很久,以致于我们对于 Virtual DOM 这个词都已经很熟悉了,网上也有非常多的介绍 React.Virtual DOM 的文章.但是直到前不久我专门花时间去学习 ...

  8. 【vue系列】Virtual DOM 真的比操作原生 DOM 快吗?

    一.前言 网上都说操作真实dom怎么怎么慢,这儿有个例子:http://chrisharrington.github.io/demos/performance/,例子循环2000个随机数组,点击按钮重 ...

  9. 如何理解Virtual DOM

    什么是虚拟DOM 接下来用vdom(Virtual DOM)来简称为虚拟DOM. 指的是用JS模拟的DOM结构,将DOM变化的对比放在JS层来做.换而言之,虚拟DOM就是JS对象.如下DOM结构: & ...

随机推荐

  1. [TJOI2015]概率论

    [TJOI2015]概率论 史上最短黑题 看起来一脸懵逼,没有取模,1e-9 根据期望定义,发现 分母是一个卡特兰数,,,,不能直接算 所以考虑怎么消掉一些东西 gn表示n个点的叶子个数和,fn表示n ...

  2. Ubuntu 服务器上面--安装和配置mysql 【转】

    更新源列表 打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入root用户的密码"--> ...

  3. create-react-app中添加less支持

    前言 使用 create-react-app 脚手架创建项目后,默认是不支持 less 的.所以我们需要手动添加. 第一步 暴露webpack配置文件 使用 create-react-app 创建的项 ...

  4. echarts地图详解

    $(function() { // 路径配置 require.config({ paths : { // echarts: 'http://echarts.baidu.com/build/dist' ...

  5. WinForm文件说明

    以上位置,双击即可. 界面可以通过拖动控件,也可以通过背后的界面代码去布局. 如果删除了事件代码,界面可能报错,因为界面代码中有未删除的残余(波浪线提示处代码,直接删除即可). 对于多个窗体,Prog ...

  6. 前端面试题整理—Vue篇

     1.对vue的理解,有什么特点,vue为什么不能兼容IE8及以下浏览器 vue是一套用于构建用户界面的渐进式框架,核心是一个响应的数据绑定系统 vue是一款MVVM框架,基于双向绑定数据,当数据发生 ...

  7. ES6 Class语法学习

    前言 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScript ...

  8. html设置背景图片并自适应

    <style> html{ height:100%; } body{ padding: 0; margin: 0; background: url(images/2.jpg); backg ...

  9. 数字化IT人才与组织

    企业的数字化目标 数字时代需要怎样的IT 数字化平台战略 产品一体化交付能力 产品设计与规划的能力 路线图 数字人才框架 Tips: 赋能授权(Empowerment)是近年来应最多的商业语汇之一.赋 ...

  10. SpringBoot系列: 使用 Swagger 生成 API 文档

    SpringBoot非常适合开发 Restful API程序, 我们都知道为API文档非常重要, 但要维护好难度也很大, 原因有: 1. API文档如何能被方便地找到? 以文件的形式编写API文档都有 ...