key是什么

key是虚拟DOM的一个重要标识,在DIff算法中,key对我们的性能也有着至关重要到的作用,有key就可以优化Diff算法,提高渲染性能;

key在页面更新的时候做了什么

1、首先,当我们进行一个页面更新,比如说新添加了一行数据,此时我们会生成一个新的DOM树;

2、通过key值,定位到两个DOM树节点所在位置;
(1)如果两个DOM树内容比对,没发生变化,我们直接使用原来的真实DOM
(2)如果新旧DOM树节点发生了变化就替换掉之前旧的虚拟DOM,生成新的真实DOM
(3)如果没找到同样的key值,直接生成新的真实DOM

如果是以index作为key值


根据上图可以看出,新增加一条数据,就生成了三个真实DOM,生成新的真实DOM是比较消耗性能的。所以用index作为key值对性能来说并不是最优的。

如果是以id作为key值


根据上图我们可以发现,因为id具有唯一性,所以通过id对比新旧节点DOM,添加几条数据,就会生成几条DOM;

在虚拟DOM和Diff算法中为什么不建议使用index作为key值?相关推荐

  1. 虚拟DOM和Diff算法 - 入门级

    什么是虚拟Dom 我们知道我们平时的页面都是有很多Dom组成,那虚拟Dom(virtual dom)到底是什么,简单来讲,就是将真实的dom节点用JavaScript来模拟出来,而Dom变化的对比,放 ...

  2. vue--mixin混入以及虚拟DOM和diff算法

    mixin混入 使用它的好处: 将 options 中的配置项可以单独抽离出来,单独管理,这样方便维护 使用: 新建一个对象用来保存 options 中某一个配置项,比如: methods 接下来要将 ...

  3. vue 虚拟dom和diff算法详解

    虚拟dom是当前前端最流行的两个框架(vue和react)都用到的一种技术,都说他能帮助vue和react提升渲染性能,提升用户体验.那么今天我们来详细看看虚拟dom到底是个什么鬼 虚拟dom的定义与 ...

  4. vue之购物车案例升级版、v-model之lazy、number、trim的使用、fetch和axios、计算属性、Mixins、虚拟dom与diff算法 key的作用及组件化开发

    文章目录 1.购物车案例升级版(含价格统计.全选/反选.商品增加减少) 2.v-model之lazy.number.trim的使用 3.fetch和axios 3.1.通过jquery+ajax实现v ...

  5. 【Vue源码解析】Vue虚拟dom和diff算法

    Vue虚拟dom和diff算法 1. 简介 2. 搭建环境 1. 安装snabbdom 2. 安装webpack5并配置 3.函数 3.1 虚拟节点vnode的属性 3.2 使用h函数 创建虚拟节点 ...

  6. React简介、虚拟DOM、Diff算法、创建React项目、JSX语法、组件、组件声明方式、组件传值props和state、组件的生命周期

    React简介: 前面只是简单介绍移动APP开发,后面还会继续深入介绍移动app开发:其中想要用ReactNative开发出更出色的应用,那么就得学好React,下面将介绍React: React 是 ...

  7. 探秘vue核心之虚拟DOM与diff算法

    探秘vue核心之虚拟DOM与diff 一.真实DOM和其解析流程 所有的浏览器渲染引擎工作流程大致分为5步: 创建 DOM 树 -> 创建 Style Rules -> 构建 Render ...

  8. 浏览器性能优化(2)React 虚拟 dom与diff算法

    随着前端技术快速发展,现在的mvvm几大框架遍布前端行业,那么它们对浏览器的性能到底影响多大?与传统的jq相比做了哪些优化呢? 文章目录: React中的虚拟DOM是什么? 虚拟DOM的简单实现(di ...

  9. 【总结】1135- 图解虚拟 DOM 之 DIff 算法

    原文: https://juejin.cn/post/7000266544181674014 1. 目录 1. 相关知识点: 2. 虚拟DOM(Virtual DOM) 2.1. 什么是虚拟DOM 2 ...

最新文章

  1. python量化策略代码_手把手教你用三行python 代码做一个动量策略「量化投资系列」...
  2. 使用SAP C4C rule editor动态控制UI上某个按钮是否显示
  3. 套接字Select I/O模型
  4. MySql 中文乱码排查解决方案
  5. 实现flex LinkBar 组件 动态切换ico图标
  6. EF+postgresql中的一些问题
  7. 深度学习attention原理_深度原理学习–Redis集群
  8. 海归计算机专业简历怎么写,海归硕士求职简历该怎么写?
  9. 苹果平板买哪款最好?
  10. 系统目录 linux命令,Linux系统目录和命令介绍
  11. Python 十六进制数与ascii码的转换
  12. 计算机辅助园林设计考试题,计算机辅助园林规划设计之软件比较
  13. python多维列表索引越界怎么处理_python列表索引越界
  14. 自己动手写reg注册表文件--thanklife整理后
  15. 初级第二旬04—六字准提观试题
  16. ASML的EUV光刻机卖不动?
  17. 领导力21法则 非常不错
  18. STC8H开发(十): SPI驱动Nokia5110 LCD(PCD8544)
  19. 【小白必看】2020 笔记本电脑选择科普
  20. MATLAB图像数字水印的方案

热门文章

  1. 计算机丨浏览器访问出现DNS_PROBE_POSSIBLE解决方法
  2. FZU 1894 志愿者选拔 - 单调队列
  3. 专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的
  4. js制作带有遮罩弹出层实现登录小窗口
  5. 搭建Struts2开发环境
  6. [置顶] Oracle学习经验谈
  7. HDU2017 字符串统计【入门】
  8. Bailian2899 Bailian3242 矩阵交换行【矩阵】
  9. Bailian4075 矩阵旋转【矩阵】
  10. CCF201604-3 路径解析(解法三)(90分)(废除!!!)