当前位置:首页 > 科技  > 软件

小红书面试:v-for循环,为什么不建议使用index作为key?

来源: 责编: 时间:2024-04-24 17:31:44 295观看
导读Hello,大家好,我是 Sunday。最近有个同学在小红书三面的时候遇到了一个面试题:“v-for循环,为什么不建议使用index作为key?”按说这个问题并不复杂,所以该同学直接回答:“使用 index 作为 key 可能会导致渲染性能问题,特别是

Hello,大家好,我是 Sunday。HrW28资讯网——每日最新资讯28at.com

最近有个同学在小红书三面的时候遇到了一个面试题:“v-for循环,为什么不建议使用index作为key?”HrW28资讯网——每日最新资讯28at.com

按说这个问题并不复杂,所以该同学直接回答:“使用 index 作为 key 可能会导致渲染性能问题,特别是数据源使用了 unshift 将数据添加到头部时,会导致 index 被重新规划,从而导致重新渲染。”HrW28资讯网——每日最新资讯28at.com

然后面试官继续追问:“为什么 index 变化了就会导致 dom 重新渲染?它的渲染机制是什么?”HrW28资讯网——每日最新资讯28at.com

额... 吃了没有看过源码的亏,导致这个问题并没有回答出来(但愿该同学这次小红书面试可以顺利通过,毕竟都到技术三面了)。HrW28资讯网——每日最新资讯28at.com

所以,咱们今天就针对这个面试题来说一下。HrW28资讯网——每日最新资讯28at.com

v-for 循环的渲染时机

在 Vue 的渲染中,有两个比较重要的渲染时机:渲染、更新。HrW28资讯网——每日最新资讯28at.com

  • 渲染:指的是 DOM 的首次渲染。首次的渲染性能的消耗是固定的。
  • 更新:指的是 数据变化后影响到的视图变化,所谓的性能问题,主要就集中在这里。

我们以这段代码为例,以下代码表示的就是一段 更新 的逻辑:HrW28资讯网——每日最新资讯28at.com

<template> <div>  <ul>   <li v-for="(item, index) in list" :key="index">{{ item }}</li>  </ul>  <button @click="change">change</button> </div></template><script setup>const list = ref([1, 2, 3])const change = () => { list.value = [3, 2, 1]}</script>

如果我们把 [1, 2, 3] 作为一组 dom,把 [3, 2, 1] 作为另外一组 dom,那么 dom 由 [1, 2, 3] 变成 [3, 2, 1] 的过程就是 DOM 更新。HrW28资讯网——每日最新资讯28at.com

key 在渲染中的作用

同时,我们需要注意:针对于 v-for 的 dom 更新,一定是:两组 dom 对比发生的变化。HrW28资讯网——每日最新资讯28at.com

而在 vue 中,一旦两组 dom 对比更新,那么就会触发 diff 算法 的逻辑,而在 diff 中有这样一段 vue 的源代码 isSameVNodeType:HrW28资讯网——每日最新资讯28at.com

图片图片HrW28资讯网——每日最新资讯28at.com

这段代码是用来判断 两个 DOM 是否相等的。HrW28资讯网——每日最新资讯28at.com

它的判断条件有两个:HrW28资讯网——每日最新资讯28at.com

  1. type:表示当前 dom 的类型,比如:li、div、p 等不同标签名
  2. key:v-for 循环中绑定的 key 值

那么由此我们就可以知道:在 vue 中,通过 type + key 两个属性来判断 dom 是否相等。HrW28资讯网——每日最新资讯28at.com

如果条件满足(isSameVNodeType 返回 true),那么就不会重新渲染 dom,从而可以 提升性能HrW28资讯网——每日最新资讯28at.com

index 为什么会影响性能?

根据上面的内容,我们可以知道:在 type 不变的前提下,key 就决定了 dom 是否要重新渲染。HrW28资讯网——每日最新资讯28at.com

假如,我们使用 index 作为 key,同时使用 unshift 方法为数组添加了一个新的元素,那么所有的 index 都会发生变化,从而导致:isSameVNodeType 返回 false,即:所有的 dom 全部重新渲染 从而影响性能HrW28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85223-0.html小红书面试:v-for循环,为什么不建议使用index作为key?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 十个每个程序员都应该知道的JavaScript技巧

下一篇: 大白话讲解Rust中令人头痛的“所有权”

标签:
  • 热门焦点
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对&ldquo;势&rdquo;的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top