谈谈Vue/React中的虚拟DOM(vDOM)与Key值
谈谈Vue/React中的虚拟DOM(vDOM)与Key值
一、DocumentFragment
在了解虚拟DOM前,先来了解DOM的一个对象属性——DocumentFragment。
在一次操作中,需要频繁操作DOM时,就可以先将要改变的节点附在DocumentFragment上,之后再将该对象渲染到DOM中,改方法只对DOM进行了一次操作,可以显著提高性能。
但是该方法只适用于局部操作,而在真实的项目中,需要的不仅仅是DocumentFragment,于是就有了虚拟DOM的产生
紧接着,对于这么一个东西,我们先来基本的三连问。是什么?为什么?怎么用?
二、VDOM
什么是虚拟DOM?
虚拟DOM的本质是一个和真实DOM结构类似的JS对象
为什么要用虚拟DOM?
虚拟DOM可以提高浏览器的渲染速度。对比操作JS对象,操作真实的DOM消耗的性能较多,频繁的操作DOM时,优势彰显的更为明显。
虚拟DOM的实现步骤?
1、在页面首次渲染时,将要渲染的数据全部加载到虚拟DOM中,而后在一次性渲染到真实DOM上
2、在数据变化时,额外的生成一颗虚拟DOM树
3、通过Diff算法对比修改的部分,而后将修改部分渲染到真实的DOM中
4、释放内存
真实DOM与虚拟DOM示意图
真实DOM
虚拟DOM则类似与如下图
三、Key值的用处
在一个Vue项目或者React项目中,写循环时,往往会加上key值。那么这个key值到底有多大的用处呢?
首先,在Vue中,存在一个DOM复用机制,会尽量的回收DOM元素进行复用,而这个机制本身是高效的,但很多时候也会造成不可预知的Bug,而在加了key值后,元素就有了一个标识,复用机制不会复用带key值的元素。而React也存在类似的机制。
反之,若使用相同的key值,可以使组件复用,也有可能导致渲染内容缺失。
因此,key值一般来说,最好是
独一无二的。除此之外,虚拟DOM在使用Diff算法进行对比时,若存在key值,可以更高效更迅速。
谈谈Vue/React中的虚拟DOM(vDOM)与Key值的更多相关文章
- 深入理解react中的虚拟DOM、diff算法
文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 React中的虚拟DOM与Vue中的虚拟DOM比较 React中的虚拟DOM是什么? ...
- 简谈react中的虚拟DOM
相信你在看到此篇前也翻阅大量的对DOM的文章讲解和介绍 react中的虚拟DOM 此篇我尽量说人话(大白话),不然想必你在看到别的大神的文章早就懂了. 不说废话了,上干货. 1.首先简单对Html中的 ...
- React中的虚拟DOM
当组件当state和props发生变化当时候,组件当render函数就会重新执行,组件就会被重新渲染,react中实现这种重新渲染,他的性能是非常高的,因为他引入了一个虚拟Dom的概念,那么什么是虚拟 ...
- 1.React中的虚拟DOM
1.state 数据 2.JSX模板 3.数据+ 模板 结合,生成真实的DOM,来显示 4.state发生改变 5.数据 + 模板 结合,生成真实的DOM,替换原始的DOM 缺陷: 第一次生成了一个完 ...
- [react] 什么是虚拟dom?虚拟dom比操作原生dom要快吗?虚拟dom是如何转变成真实dom并渲染到页面的?
壹 ❀ 引 虚拟DOM(Virtual DOM)在前端领域也算是老生常谈的话题了,若你了解过vue或者react一定避不开这个话题,因此虚拟DOM也算是面试中常问的一个点,那么通过本文,你将了解到如下 ...
- vue中的虚拟DOM树
什么是虚拟DOM树?(Virtual DOM) 虚拟DOM树其实就是一个普通的js对象,它是用来描述一段HTML片段的 01 当页面渲染的时候Vue会创建一颗虚拟DOM树 02 ...
- Vue源码探究-虚拟DOM的渲染
Vue源码探究-虚拟DOM的渲染 在虚拟节点的实现一篇中,除了知道了 VNode 类的实现之外,还简要地整理了一下DOM渲染的路径.在这一篇中,主要来分析一下两条路径的具体实现代码. 按照创建 Vue ...
- vue 快速入门 系列 —— 虚拟 DOM
其他章节请看: vue 快速入门 系列 虚拟 DOM 什么是虚拟 dom dom 是文档对象模型,以节点树的形式来表现文档. 虚拟 dom 不是真正意义上的 dom.而是一个 javascript 对 ...
- 【Web技术】401- 在 React 中使用 Shadow DOM
本文作者:houfeng 1. Shadow DOM 是什么 Shadow DOM 是什么?我们先来打开 Chrome 的 DevTool,并在 'Settings -> Preferences ...
随机推荐
- ADO-添加msado15.dll及基本类对象的了解
一.dll文件的导入 参考文献:https://blog.csdn.net/qq_31209383/article/details/51199762 要使用数据库,首先在stdafx.h中导入msad ...
- 关于Windows与Linux下32位与64位开发中的数据类型长度的一点汇总
32位与64位的数据类型长度是不一样的,而且windows和linux也有些许区别,下面把64位下的数据长度列表如下(无符号unsigned和有符号的长度一样): linux64 ...
- luogu1901 发射站
单调栈 正着插一遍反着插一遍 记录每个点左边右边第一个比他高的... yyc太强辣 #include<iostream> #include<cstdlib> #include& ...
- ACM学习历程—HDU4417 Super Mario(树状数组 && 离线)
Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability re ...
- http头部解释
If-Modified-Since,If-Node-Match,ETag,Last-Modified 1 属于 Request Headers的是:If-Modified-Since,If-Node- ...
- JavaScript编写代码时候没有提示
如上图所示如果没有提示可能是箭头所指示的类型不正确.
- Hdu 4762 网络赛 高精度大数模板+概率
注意题目中的这句话he put the strawberries on the cake randomly one by one,第一次选择草莓其实有N个可能,以某一个草莓为开头,然后顺序的随机摆放, ...
- unittest单元测试生成HTML测试报告
前言: HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML的 测试报告. 一.下载HTMLTestRunnerNew.py文件: 下载链接 ...
- RS485波特率问题
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51683648 最近再做一个项目,发现485不能发送数据,感到非常奇怪!后来查阅相关 ...
- Material使用07 MdGridListModule的使用
1 MatGridListModule简介 对相似数据的展现,尤其是像是图片的展示 使用起来很像表格 官方文档:点击前往 2 MatGridListModule提供的指令 2.1 mat-grid-l ...