日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

小紅書面試:v-for循環,為什么不建議使用index作為key?

來源: 責編: 時間:2024-04-24 17:31:44 158觀看
導讀Hello,大家好,我是 Sunday。最近有個同學在小紅書三面的時候遇到了一個面試題:“v-for循環,為什么不建議使用index作為key?”按說這個問題并不復雜,所以該同學直接回答:“使用 index 作為 key 可能會導致渲染性能問題,特別是

Hello,大家好,我是 Sunday。ia328資訊網——每日最新資訊28at.com

最近有個同學在小紅書三面的時候遇到了一個面試題:“v-for循環,為什么不建議使用index作為key?”ia328資訊網——每日最新資訊28at.com

按說這個問題并不復雜,所以該同學直接回答:“使用 index 作為 key 可能會導致渲染性能問題,特別是數據源使用了 unshift 將數據添加到頭部時,會導致 index 被重新規劃,從而導致重新渲染。”ia328資訊網——每日最新資訊28at.com

然后面試官繼續追問:“為什么 index 變化了就會導致 dom 重新渲染?它的渲染機制是什么?”ia328資訊網——每日最新資訊28at.com

額... 吃了沒有看過源碼的虧,導致這個問題并沒有回答出來(但愿該同學這次小紅書面試可以順利通過,畢竟都到技術三面了)。ia328資訊網——每日最新資訊28at.com

所以,咱們今天就針對這個面試題來說一下。ia328資訊網——每日最新資訊28at.com

v-for 循環的渲染時機

在 Vue 的渲染中,有兩個比較重要的渲染時機:渲染、更新。ia328資訊網——每日最新資訊28at.com

  • 渲染:指的是 DOM 的首次渲染。首次的渲染性能的消耗是固定的。
  • 更新:指的是 數據變化后影響到的視圖變化,所謂的性能問題,主要就集中在這里。

我們以這段代碼為例,以下代碼表示的就是一段 更新 的邏輯:ia328資訊網——每日最新資訊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 更新。ia328資訊網——每日最新資訊28at.com

key 在渲染中的作用

同時,我們需要注意:針對于 v-for 的 dom 更新,一定是:兩組 dom 對比發生的變化。ia328資訊網——每日最新資訊28at.com

而在 vue 中,一旦兩組 dom 對比更新,那么就會觸發 diff 算法 的邏輯,而在 diff 中有這樣一段 vue 的源代碼 isSameVNodeType:ia328資訊網——每日最新資訊28at.com

圖片圖片ia328資訊網——每日最新資訊28at.com

這段代碼是用來判斷 兩個 DOM 是否相等的。ia328資訊網——每日最新資訊28at.com

它的判斷條件有兩個:ia328資訊網——每日最新資訊28at.com

  1. type:表示當前 dom 的類型,比如:li、div、p 等不同標簽名
  2. key:v-for 循環中綁定的 key 值

那么由此我們就可以知道:在 vue 中,通過 type + key 兩個屬性來判斷 dom 是否相等。ia328資訊網——每日最新資訊28at.com

如果條件滿足(isSameVNodeType 返回 true),那么就不會重新渲染 dom,從而可以 提升性能ia328資訊網——每日最新資訊28at.com

index 為什么會影響性能?

根據上面的內容,我們可以知道:在 type 不變的前提下,key 就決定了 dom 是否要重新渲染。ia328資訊網——每日最新資訊28at.com

假如,我們使用 index 作為 key,同時使用 unshift 方法為數組添加了一個新的元素,那么所有的 index 都會發生變化,從而導致:isSameVNodeType 返回 false,即:所有的 dom 全部重新渲染 從而影響性能ia328資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-85223-0.html小紅書面試:v-for循環,為什么不建議使用index作為key?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 十個每個程序員都應該知道的JavaScript技巧

下一篇: 大白話講解Rust中令人頭痛的“所有權”

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 華為HarmonyOS 4.0將于8月4日發布 或搭載AI大模型技術

    華為宣布HarmonyOS4.0將于8月4日正式發布。此前,華為已經針對開發者公布了HarmonyOS4.0,以便于開發者提前進行適配,也因此被曝光出了一些新系統的特性
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • OPPO K11采用全方位護眼屏:三大護眼能力減輕視覺疲勞

    日前OPPO官方宣布,全新的OPPO K11將于7月25日正式發布,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼IMX890主攝,堪稱是2000檔位影像表
Top 主站蜘蛛池模板: 南陵县| 曲沃县| 新闻| 大英县| 洞头县| 黄山市| 温州市| 社会| 新乡县| 永修县| 舟山市| 昭苏县| 南靖县| 巧家县| 灵丘县| 城口县| 古浪县| 黑河市| 通江县| 和硕县| 平度市| 北海市| 华蓥市| 阜新| 兰西县| 沿河| 普兰县| 神木县| 丹棱县| 比如县| 剑河县| 长宁县| 灌云县| 凤城市| 宽城| 洛宁县| 五常市| 汶上县| 九台市| 庆云县| 白朗县|