返回顶部
首页 > 资讯 > 前端开发 > JavaScript >使用v-memo缓存模板子树提高应用性能详解
  • 235
分享到

使用v-memo缓存模板子树提高应用性能详解

2024-04-02 19:04:59 235人浏览 安东尼
摘要

目录引言v-memo 是做什么的?事例错误的使用方式管理更新与 v-for 结合使用无意中停止了子组件触发的更新总结引言 vue3 为我们提供了几项开箱即用的重大性能改进,但也引入了

引言

vue3 为我们提供了几项开箱即用的重大性能改进,但也引入了一些额外的手动功能,可以帮助提高我们的应用性能。

在这节课中,我们介绍一下,在 Vue 3.2 中引入新指令 v-memo。引入这个指令的目的是帮助我们提高中型/大型 Vue 应用程序的性能,小项目大家根据需要自行决定。

v-memo 是做什么的?

官网对 v-memo 定义是这样的:

缓存一个模板的子树。在元素和组件上都可以使用。为了实现缓存,该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相同,那么整个子树的更新将被跳过。举例来说:

看起来有点绕,但实际上,很好理解。v-memo 所做的与我们现有的计算属性一样,只不过 v-memo 的对象是 DOM。

这个新指令将缓存它所控制的DOM部分,如果一个特定的值发生变化,只需运行更新并重新渲染。这些值是由我们自己手动设置。

事例

<template>
  <div>
    ..the rest of the component
    <div v-memo="[myValue]">
      <svg >
        <title>{{MyValue}}</title>
        ...
      </svg>
      <vue-custom-element :value="myValue"></vue-custom-element>
    </div>
  </div>
</template>

对上面解释一下: v-memo 通常是作为组件的一部分来使用的,它只是影响组件 dom 的一个子集。

<div v-memo="[myValue]">

接着,我们将 v-memo分配给了一个特定的 DIV 和它的所有子元素。当调用 v-memo 时,需要传递一个值数组,以控制子树的渲染。

数组接受一个或多个值 v-memo="[valueOne, valueTwo]",也接受像 v-memo="myValue === true"这样的表达。

另外:用一个空数组调用 v-memo相当于使用v-once,只会渲染该部分组件一次。

<svg >
  <title>{{MyValue}}</title>
  ...
</svg>
<vue-custom-element :value="myValue"></vue-custom-element>

同在看下子树的内容。在我们的例子中,使用了一个 svg 元素和一个自定义 Vue 组件 vue-custom-element。这样做是为了说明一件事:v-memo 包含任何元素。

错误的使用方式

<div v-memo="[myValue]">
  <p>Static content, no vue values here</p>
</div>

在上面的例子中,包含在 v-memo 中的子树不需要被缓存,因为它是静态的,不会改变(它不包括任何Vue变量)。Vue3 会对静态进行一个提升,以便提高性能。

在一个静态的html上添加 v-memo 是没啥作用,不管这个HTML有多复杂。

管理更新

在有些情况下,v-memo不仅可以用来提高性能,还可以通过控制组件的更新周期,实际改善UX(用户体验)。

<div v-memo="[allFieldChanged]">
  <p>{{ field1 }}</p>
  <p>{{ field2 }}</p>
  <p>{{ field3 }}</p>
  <p>{{ field4 }}</p>
</div>

在上面的例子中,改变一个单独的字段,例如 field1,并不会导致重新渲染。新的字段将在所有字段都被更新后显示。

最近遇到一个情况,一个子组件会对一个大的JSON数据集进行更新和响应。在这种情况下,使用 v-memo 真的很有帮助,当所有的变化都完成后,就可以触发更新。

与 v-for 结合使用

使用 v-memo 的一个最常见的用例是在处理使用 v-for 渲染的非常大的列表时。

<div v-for="item in list" :key="item.id" v-memo="[item.id === selected]">
  <p>ID: {{ item.id }} - selected: {{ item.id === selected }}</p>
  <p>...more child nodes</p>
</div>

如果不在上面的代码中使用 v-memoselected 变量的每一次改变都会导致列表的完全重新渲染。新指令提供的缓存,允许只更新表达式 item.id === selected 发生变化的行,也就是当某个项被选中或者取消时。

如果我们考虑一个有 1000 条数据的列表。使用上述代码的 v-memo,可以为每一个变化节省998个条重新渲染。

无意中停止了子组件触发的更新

我们知道 v-memo 会停止子树渲染更新,但需要注意的是,使用这个指令实际上会停止任何可能被更新触发的代码的执行,如 watch 函数等。

<div v-memo="[points > 1000]">
  <myComponent :points="points" />
</div>
//myComponent
<isLevel1 v-if="points <= 1000">....</isLevel1>
<isLevel2 v-if="points > 1000">...</isLevel2>
<script>
...,
watch: {
  points() {
    logPointChange();
  }
}

在上面的代码中,如果我们的 points 值是 1000 以内变化,那么 watch 函数不会被执行,直到 points 的值大于 1000 才会触发 watch 函数的执行。

总结

这个新的指令对于要求性能极高的项目有很在帮助了,一般是在比较大型的项目中使用的,当然小型项目,大家可以根据项目需要进行食用。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

更多关于v-memo缓存模板子树的资料请关注编程网其它相关文章!

--结束END--

本文标题: 使用v-memo缓存模板子树提高应用性能详解

本文链接: https://lsjlt.com/news/167828.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用v-memo缓存模板子树提高应用性能详解
    目录引言v-memo 是做什么的?事例错误的使用方式管理更新与 v-for 结合使用无意中停止了子组件触发的更新总结引言 Vue3 为我们提供了几项开箱即用的重大性能改进,但也引入了...
    99+
    2024-04-02
  • Vue3.2 新增指令 v-memo 用法详解(提高性能利器)
    目录v-memo 官方定义我对 v-memo 的理解与v-for 一起使用使用场景vue3.2新增指令v-memo的使用v-memo的讲解场景描述v-memo的使用哈喽,大家好 我是...
    99+
    2024-04-02
  • ASP中如何使用缓存提高性能?
    在ASP应用程序中,缓存是一种非常重要的技术,可以大大提高应用程序的性能。缓存可以将一些常用的数据或计算结果存储在内存中,以便下次访问时能够快速获取,从而减少了服务器的负担和响应时间。本文将介绍ASP中如何使用缓存提高性能,并且提供一些简...
    99+
    2023-07-27
    缓存 shell 异步编程
  • 如何利用缓存提高ASP应用程序的性能?
    ASP应用程序的性能对于网站的用户体验至关重要。如果您的网站响应速度很慢,那么访问者可能会失去耐心并转向其他网站。因此,优化ASP应用程序的性能至关重要。本文将介绍如何使用缓存来提高ASP应用程序的性能。 一、什么是缓存? 缓存是一种将数据...
    99+
    2023-07-27
    缓存 shell 异步编程
  • 如何使用 PHP 缓存来提高网站性能?
    随着互联网的不断发展,网站性能越来越受到关注。其中,缓存技术是提高网站性能的重要手段之一。在 PHP 中,我们可以使用缓存来减少数据库查询和文件读写操作,从而提高网站的响应速度和并发性能。本文将介绍如何使用 PHP 缓存来提高网站性能,并且...
    99+
    2023-10-04
    缓存 npm git
  • 如何使用Java存储来提高Bash缓存的性能?
    Bash是一种流行的Unix shell,用于在Unix和Linux系统上执行命令。在Bash中,缓存被广泛使用来提高命令执行的速度。然而,在一些情况下,Bash的缓存性能可能会遇到瓶颈。本文将介绍如何使用Java存储来提高Bash缓存的性...
    99+
    2023-10-18
    存储 bash 缓存
  • ASP对象缓存:如何使用缓存机制提高网站性能?
    在开发网站时,提高网站性能是一个非常重要的问题。其中一个关键的方面就是如何优化数据访问和对象创建的效率,以减少页面加载时间和服务器负载。ASP对象缓存是一个非常好的解决方案,可以帮助我们在服务器端缓存数据和对象,从而提高网站性能。本文将详...
    99+
    2023-06-24
    对象 编程算法 缓存
  • 如何使用 ASP IDE 缓存来提高网站性能?
    ASP IDE 缓存是一种强大的工具,可以帮助我们提高网站性能。在这篇文章中,我们将讨论如何使用 ASP IDE 缓存来优化网站性能。 什么是 ASP IDE 缓存? ASP IDE 缓存是一种用于存储和管理 ASP 网站数据的技术。它可以...
    99+
    2023-06-09
    ide 响应 缓存
  • 如何在Java编程中使用缓存提高性能?
    在Java编程中,缓存是一个非常重要的概念,它可以大幅提升程序的性能。在本文中,我们将介绍如何在Java编程中使用缓存来提高性能。 一、什么是缓存? 在计算机领域,缓存是指将数据存储在临时的存储器中,以便在以后的访问中更快地访问这些数据。在...
    99+
    2023-10-05
    缓存 分布式 编程算法
  • 如何使用 ASP 缓存 shell 提高 Linux 系统性能?
    ASP缓存shell是一种高效的缓存技术,可用于优化Linux系统的性能。本文将介绍如何使用ASP缓存shell提高Linux系统的性能。 什么是ASP缓存shell? ASP缓存shell是一种基于内存的缓存技术,可用于缓存重复使用的数据...
    99+
    2023-08-08
    缓存 shell linux
  • PHP缓存教程:如何使用NPM来提高性能?
    随着网站访问量的增加,PHP的性能问题越来越明显,这时候,缓存就成为了提高性能的重要手段之一。本篇文章将会介绍如何使用NPM来进行PHP缓存,从而提高网站的性能。 一、什么是PHP缓存? PHP缓存是指将PHP脚本的编译结果保存在内存中,...
    99+
    2023-07-25
    缓存 教程 npm
  • 如何使用GO语言和Laravel提高缓存性能?
    随着Web应用程序的发展,缓存已经成为了提高性能的重要手段。而GO语言和Laravel都提供了很好的缓存解决方案。本文将重点介绍如何使用GO语言和Laravel提高缓存性能。 GO语言缓存 GO语言提供了一个内置的缓存包,即"contain...
    99+
    2023-11-12
    关键字 缓存 laravel
  • 如何在Go中使用Apache缓存提高IDE性能?
    在Go语言中,使用Apache缓存来提高IDE性能是一种常见的做法。Apache缓存可以缓存常用的静态资源文件,从而减少IDE的读取时间,提高IDE的性能。本文将介绍如何在Go中使用Apache缓存来提高IDE性能。 一、Apache缓存的...
    99+
    2023-11-12
    apache 缓存 ide
  • 如何在JavaScript中使用缓存来提高网站性能?
    在当今的互联网时代,网站性能是一个至关重要的因素,因为用户对于快速的响应和流畅的体验有着越来越高的要求。而缓存技术则是提高网站性能的重要手段之一。本文将介绍如何在JavaScript中使用缓存来提高网站性能。 一、什么是缓存? 缓存是一种临...
    99+
    2023-06-29
    缓存 javascript 面试
  • 如何在 ASP 框架中使用 npm 缓存提高性能?
    在开发 ASP.NET 应用程序时,我们通常使用 NuGet 包管理器来引用第三方依赖项。但是,如果你已经在项目中使用了 npm 包管理器,你可能会想知道如何在 ASP.NET 应用程序中使用 npm 缓存来提高性能。 npm 缓存是一个本...
    99+
    2023-11-09
    框架 缓存 npm
  • PHP-FPM性能提高实践:缓存技术的应用与优化
    引言:随着互联网技术的不断发展,PHP作为一种广泛应用的编程语言,在网站和应用程序开发中扮演着重要的角色。然而,由于PHP是一种脚本语言,其性能相对较低,容易造成对服务器的过大压力。为了提高PHP-FPM性能,我们可以采用缓存技术来优化代码...
    99+
    2023-10-21
    php-fpm 缓存技术 性能提高
  • PHP框架中的缓存技术详解:提升应用性能的利器
    缓存技术可提升 php 应用性能,通过存储数据副本实现快速访问。主流 php 框架提供缓存支持,如 laravel 提供多样化的缓存驱动,symfony 提供灵活的缓存组件,zend f...
    99+
    2024-05-23
    缓存 php laravel redis
  • 如何使用 PHP 缓存 NumPy 实时来提高网站性能?
    随着互联网的快速发展,网站的性能问题愈发显著,尤其是对于那些需要大量计算的网站,如数据分析、机器学习等,更是如此。这些网站需要处理大量的数据,而且需要在实时性要求较高的情况下进行计算。在这种情况下,缓存技术是一个非常有效的解决方案。 在本...
    99+
    2023-10-03
    缓存 numy 实时
  • Java和Bash:如何使用异步编程提高缓存性能?
    随着互联网应用的不断发展,缓存已经成为了一个非常重要的组件。缓存的作用是将一些经常使用的数据存储在内存中,以便更快地访问这些数据。但是,随着数据量的增加,缓存的性能也会变得越来越重要。在这篇文章中,我们将讨论如何使用Java和Bash进行...
    99+
    2023-06-28
    bash 缓存 异步编程
  • 如何在PHP开发中使用缓存提高系统性能?
    如何在PHP开发中使用缓存提高系统性能?在当今互联网发展迅速的时代,系统性能成为了一个至关重要的指标。对于PHP开发来说,缓存是提高系统性能的一个重要手段。本文将探讨如何在PHP开发中使用缓存来提高系统性能。一、为什么使用缓存提升系统性能:...
    99+
    2023-11-04
    性能优化 PHP开发 缓存管理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作