Vue3.2 新增 v-memo

简介: 在组件和元素都可以使用,主要是可以缓存 期望的类型是个数组any[],该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相同,那么他的更新将会被跳过,甚至虚拟 DOM 的 vnode 创建也将被跳过,提升了性能。

image.png


这个指令是Vue3.2新增的内置指令,大致的作用就是小幅度手动提升一部分性能


官网文cn.vuejs.org/api/built-i…


用法


在组件和元素都可以使用,主要是可以缓存 期望的类型是个数组any[],该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相同,那么他的更新将会被跳过,甚至虚拟 DOM 的 vnode 创建也将被跳过,提升了性能。


tips:如果v-memo="[]" 传入的是一个空数组,那么他的效果和v-once 一样


<div v-memo="[val]"></div>


配合v-for


配合v-for 属于最常见的情况,但是只有助于大数据量的情况例如(1000条以上)


tips:   当搭配 v-for 使用 v-memo,确保两者都绑定在同一个元素上。v-memo 不能用在 v-for 内部。


测试代码 未加v-memo 一万条数据


当组件的 selected 状态改变,默认会重新创建大量的 vnode,尽管绝大部分都跟之前是一模一样的。v-memo 用在这里本质上是在说“只有当该项的被选中状态改变时才需要更新”。这使得每个选中状态没有变的项能完全重用之前的 vnode 并跳过差异比较。


<template>
  <div>
    <div @click="select(item.id)"   :key="item.id" v-for="(item) in arr">
      {{ item.id }} - selected: {{ item.id == active }}
    </div>
  </div>
</template>
<script setup lang='ts'>
import { ref, reactive } from 'vue'
const arr = reactive<any[]>([])
for (let i = 0; i < 10000; i++) {
  arr.push({
    id: i + 1,
    name: "test"
  })
}
const active = ref(1)
const select = async (index: number) => {
  active.value = index;
  console.time()
  await Promise.resolve()
  console.timeEnd()
}
</script>
<style scoped lang='less'>
</style>


image.png


添加v-memo 之后 能缩短小部分时间


image.png


总结


如果你的项目对性能要求非常严格可以使用,但也只是小部分提升性能,如果你的项目平时没有那么大的数据量,感觉没什么有用。

目录
相关文章
|
6月前
|
JavaScript
vue组件中data为什么必须是一个函数
Vue.js 组件的 data 选项必须是一个函数,这是为了确保每个组件实例都有自己的独立数据副本,从而避免数据污染和确保组件的复用性和可预测性
|
6月前
|
JavaScript
VUE组件:Vue组件中的data为什么必须是一个函数而不是一个对象?
VUE组件:Vue组件中的data为什么必须是一个函数而不是一个对象?
66 2
|
22天前
|
JavaScript
vue 组件中的 data 为什么是一个函数 ?
【10月更文挑战第8天】 在 Vue 组件中,`data` 被定义为一个函数而非普通对象,以确保每个组件实例拥有独立的数据空间,避免数据混乱。这种方式还支持数据的响应式更新、组件的继承与扩展,并有助于避免潜在问题,提升应用的可靠性和性能。
18 2
|
3月前
|
缓存 JavaScript UED
使用 v-once 和 v-memo 进行 Vue 渲染优化
使用 v-once 和 v-memo 进行 Vue 渲染优化
|
5月前
|
JavaScript
vue组件中data为什么必须是一个函数?
vue组件中data为什么必须是一个函数?
41 1
vue3.2新增指令v-memo的使用
vue3.2新增指令v-memo的使用
|
JavaScript
53Vue - 组件的使用(data 必须是函数)
53Vue - 组件的使用(data 必须是函数)
27 0
|
12月前
Vue3.0实现todolist-通过计算属性获取vuex中定义的todolist的数据
Vue3.0实现todolist-通过计算属性获取vuex中定义的todolist的数据
41 1
|
12月前
|
JavaScript
Vue3.0实现todolist-计算属性
Vue3.0实现todolist-计算属性
39 1
|
12月前
Vue3.0实现todolist-Vue3.0定义状态管理
Vue3.0实现todolist-Vue3.0定义状态管理
33 1