I.原始渲染方式(直接操作DOM):

1.state数据;

2.JSX模板;

3.数据 + 模板 相结合,生成真实的DOM来显示;

4.state发生改变;

5.数据 + 模板结合,生成真实的DOM来显示,替换上一个模板;

II.原始渲染方式改良方案(比对之后再操作DOM):

1.state数据;

2.JSX模板;

3.数据 + 模板结合,生成真实的DOM来显示;

4.state发生改变;

5.数据 + 模板结合,生成真实的DOM,并不直接替换原来的DOM;

6.新的DOM和原始DOM做比对,找差异,找出相应的改变的地方,如只有span的内容发生了改变;

7.只用新的DOM中span元素,替换掉老的DOM中的span元素;

III.以React DOM渲染过程为例剖析虚拟DOM是如何提升性能的(操作虚拟DOM):

1.state数据;

2.JSX模板;

3.数据 + 模板组合,生成虚拟DOM,其实也就是生成一个JS对象,用它来描述真实DOM;

举个栗子,数据 + 模板组合,生成了如下的 JS 对象:(微损耗性能);

 

4.用虚拟DOM的结构生成真实的DOM,来显示:

5.state发生变化;

6.数据  + 模板生成新的虚拟DOM  (极大的提升性能)

举个栗子,state 改变了span里面的内容,把 hello world 替换成了 you are so cute,则生成了如下的 JS 对象:

7.比较第3点生成的虚拟DOM和新的第6点生成的虚拟DOM,发现是span标签中内容发生了改变;(极大的提升了性能)

8.直接操作DOM,改变span中的内容;

综上三种渲染方式,我们发现I,II方法都是直接对DOM元素进行操作,而对DOM元素的直接操作极其影响性能,对性能的损耗极大,而方案III,亦即虚拟DOM的操作方案,虽然看上去步骤更为繁琐,损耗了一些性能,但因对虚拟DOM进行比对,比对完成后才会进行DOM的渲染,极大的提升了性能;综上可知,这就是虚拟DOM性能优化的关键所在;总结了一下,主要有如下两点优点:

深入剖析虚拟DOM提升性能(Vue,React);的更多相关文章

  1. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  2. 虚拟 DOM 到底是什么?

    虚拟 DOM 到底是什么? 作者:wangshengliang 注意:由于文章太长,对文章有删减,但是不会影响整体阅读 是什么? 虚拟 DOM (Virtual DOM )这个概念相信大家都不陌生,从 ...

  3. React虚拟DOM浅析

    在Web开发中,需要将数据的变化实时反映到UI上,这时就需要对DOM进行操作,但是复杂或频繁的DOM操作通常是性能瓶颈产生的原因,为此,React引入了虚拟DOM(Virtual DOM)的机制. 什 ...

  4. 【React 7/100 】 虚拟DOM和Diff算法

    虚拟DOM和Diff算法 React更新视图的思想是:只要state变化就重新渲染视图 特点:思路非常清晰 问题:组件中只有一个DOM元素需要更新时,也得把整个组件的内容重新渲染吗? 不是这样的 理想 ...

  5. 虚拟dom?diff算法?key?Vue原理的核心三问?打包教你搞定。

    为什么需要虚拟DOM 先介绍浏览器加载一个HTML文件需要做哪些事,帮助我们理解为什么我们需要虚拟DOM.webkit引擎的处理流程,如下图所示: 所有浏览器的引擎工作流程都差不多,如上图大致分5步: ...

  6. [react] 什么是虚拟dom?虚拟dom比操作原生dom要快吗?虚拟dom是如何转变成真实dom并渲染到页面的?

    壹 ❀ 引 虚拟DOM(Virtual DOM)在前端领域也算是老生常谈的话题了,若你了解过vue或者react一定避不开这个话题,因此虚拟DOM也算是面试中常问的一个点,那么通过本文,你将了解到如下 ...

  7. 图解vue中 v-for 的 :key 的作用,虚拟dom Diff算法

    其实不只是vue,react中在执行列表渲染时也会要求给每个组件添加上key这个属性. 要解释key的作用,不得不先介绍一下虚拟DOM的Diff算法了. 我们知道,vue和react都实现了一套虚拟D ...

  8. React/虚拟DOM

    在说虚拟DOM之前,先来一个引子,从输入url到展现出整个页面都有哪些过程? 1.输入网址 2.DNS解析 3.建立tcp连接 4.客户端发送HTPP请求 5.服务器处理请求 6.服务器响应请求 7. ...

  9. React生命周期和虚拟DOM

    一.虚拟DOM 1.React并不直接操作DOM,React中的render方法,返回一个DOM描述,React能够将这个DOM描述与内存中的表现进行比较,然后以最快的方式更新浏览器 2.React实 ...

随机推荐

  1. vue ajax返回html代码不渲染解决

    <span v-html='lists.html'></span>

  2. sklearn.linear_model.LinearRegresion学习

    sklearn线性模型之线性回归 查看官网 https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearR ...

  3. vue的配置环境篇

    1.电脑已经安装的nodejs和webpack. 2.1)打开cmd.win+r.可以直接输入node -v查看版本.安装淘宝镜像  npm install -g cnpm --registry=ht ...

  4. 4.9cf自训9..

    cf401D 状态压缩dp好题,每次把新加入集合的数字放在最后即可 /* 它可以通过重新排列数字n, 它没有任何前导零, x除以m后的余数等于0. 每次把新加的数放在最后 dp[i][j]表示状态i下 ...

  5. apache 配置反向代理 设置

    1.下载 安装 下载地址:http://httpd.apache.org/download.cgi 将apache 安装到某个目录中 修改conf/http.conf文件 修改配置文件端口  (端口为 ...

  6. spark MLlib BasicStatistics 统计学基础

    一, jar依赖,jsc创建. package ML.BasicStatistics; import com.google.common.collect.Lists; import org.apach ...

  7. CodeForces 721C Journey(拓扑排序+DP)

    <题目链接> 题目大意:一个DAG图有n个点,m条边,走过每条边都会花费一定的时间,问你在不超过T时间的条件下,从1到n点最多能够经过几个节点. 解题分析:对这个有向图,我们进行拓扑排序, ...

  8. Selector-背景选择器

    Selector-背景选择器 1.主要属性 <?xml version="1.0" encoding="utf-8"?> <selector ...

  9. WPF:通过名字找控件

    var plotBorder = (Border)FindName(string.Format("PlotBorder{0}", i))

  10. port bridge enable命令导致的环路

    1.故障描述 前几天机房一台连接数据中心与核心交换的交换机宕机(硬件故障),机房有备用的设备,随即更换(配置也是早就配置好了的),但是下午就出现数据中心网络丢包问题,表现为存在mac漂移 2.拓扑 核 ...