返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何巧用Vue缓存函数浅析
  • 256
分享到

如何巧用Vue缓存函数浅析

2024-04-02 19:04:59 256人浏览 薄情痞子
摘要

目录Vue2中的缓存函数改造vue缓存函数优化总结vue2中的缓存函数 vue2版本中有这么一个缓存函数 function cached (fn) { var

vue2中的缓存函数

vue2版本中有这么一个缓存函数


  
  function cached (fn) {
    var cache = Object.create(null);
    return (function cachedFn (str) {
      var hit = cache[str];
      return hit || (cache[str] = fn(str))
    })
  }
  

上面这个函数存在一个常用场景,比如存在一个数组,需要把每个元素的首字母转为大写。


const array = ['abc', 'ed', 'abc', 'acd', 'ed', 'fkg', ...];

常用的解决方法


// 定一个capitalize函数
function capitalize (str) {
    return str.charAt(0).toUpperCase() + str.slice(1)
 };
  
 const capitalizeArray = array.map(capitalize);

细心的我们会发现array中存在不少重复的元素, 他们返回的结果一样的,实际不需要重复计算执行capitalize,而且capitalize是一个PURE函数,此时我们可以利用上面的cached做一个备忘录的功能。

改造如下


function capitalize (str) {
    return str.charAt(0).toUpperCase() + str.slice(1)
 };
  
const capitalizeArray = array.map(cached(capitalize));

当遇到重复字符串的时候会直接返回缓存的结果。想想capitalize是一个十分耗时的任务,性能优化不止一点点。

改造vue缓存函数

上面的举例是缓存同步任务的纯函数,在业务开发中存在这么一个场景,输入框搜索。当输入框触发input事件的时候,我们都会调用接口返回查询结果。比如我输入了掘金关键字返回了结果,然后又输入掘金NBA返回了结果,此时我删掉了NBA,又查询掘金, 实际上这个结果我们之前查过,如果缓存起来直接拉缓存即可,不用再去调用接口。

我们基于cached实现一个缓存异步纯函数的备忘录


const cachedAsync = function(fn) {
    const cache = Object.create(null);
    return async str => {
        const hit = cache[str];
        if (hit) {
            return hit;
        }
        // 只缓存成功的Promise, 失败直接重新请求
        return (cache[str] = await fn(str));
    };
};

使用场景


const cachedAsyncQueryPrdList = cachedAsync(prdNo => {
    // 下面是一个请求的操作,返回一个promise
    return queryPrdList({
        prdNo
    });
}); 

<template>
    <el-input v-model="prdNo" placeholder="请输入产品编码" @input="handleQueryPrdList" />
    <el-select>
        <el-option v-for="item in prdList" :label="item.label" :value="item.value">
    </el-select>
</template>
<script>
export default {
    data() {
        prdNo: '',
        prdList: [],
    },
    methods: {
        async handleQueryPrdList() {
            const { data } = await cachedAsyncQueryPrdList(this.prdNo);
            this.prdList = data;
        }
    }
}
</script>

上面实现了,当输入相同的关键字,如果之前请求是成功的,直接拉起缓存,不会重新向服务器发起请求。因为我们的备忘录只会缓存成功的promise。

优化

针对上面的场景,虽然el-input底层已经使用compositionEnd和compositionStart事件来做一层防抖,只有文字真正输入到屏幕上才会去触发input事件。但是这是不够,如果用户输入手速很快,会出现一秒发几次请求的情况,增加了服务器负担。因此这种一般会搭配防抖函数使用。

防抖函数


const debounce = (fn, ms = 300) => {
    let timeoutId;
    return function(...args) {
        clearTimeout(timeoutId);
        timeoutId = setTimeout(() => fn.apply(this, args), ms);
    };
};

然后搭配我们的cachedAsync使用


const cachedAsyncQueryPrdList = cachedAsync(prdNo => {
    // 下面是一个ajax请求的操作,返回一个promise
    return queryPrdList({
        prdNo
    });
}); 

<template>
    <el-input v-model="prdNo" placeholder="请输入产品编码"  @input="debounceQueryPrdListFn" />
    <el-select>
        <el-option v-for="item in prdList" :label="item.label" :value="item.value">
    </el-select>
</template>
<script>
const noop = () => {};
export default {
    data() {
        prdNo: '',
        prdList: [],
        debounceQueryPrdListFn: noop,
    },
    created() {
        this.debounceQueryPrdListFn = debounce(this.handleQueryPrdList);
    },
    methods: {
        async handleQueryPrdList() {
            const { data } = await cachedAsyncQueryPrdList(this.prdNo);
            this.prdList = data;
        }
    }
}
</script>

FBI WARNING:  >>> cachedAsync函数,只适用于PURE函数。

这个实现已经在生产环境稳定使用,大家可以放心食用。

总结

到此这篇关于如何巧用Vue缓存函数的文章就介绍到这了,更多相关巧用Vue缓存函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何巧用Vue缓存函数浅析

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

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

猜你喜欢
  • 如何巧用Vue缓存函数浅析
    目录vue2中的缓存函数改造vue缓存函数优化总结vue2中的缓存函数 vue2版本中有这么一个缓存函数 function cached (fn) { var...
    99+
    2024-04-02
  • 如何利用nginx做代理缓存浅析
    用到缓存就是为了减少后端的压力,提高网站并发。在网站设计中,为了更好的去中心化,我们会尽量将请求集中到前端,在前端就能处理掉。 常用的缓存类型有客户端缓存、代理缓存、服务端缓存等。 ...
    99+
    2024-04-02
  • 如何使用PHP缓存函数实现实时数据缓存?
    PHP缓存函数是一种将数据存储在内存或磁盘上的技术。该技术可以大大提高应用程序的性能和响应速度,尤其在需要频繁查询数据库的情况下。本文将介绍如何使用PHP缓存函数实现实时数据缓存。 一、什么是缓存? 缓存是将数据存储在内存或磁盘上,以便快速...
    99+
    2023-08-11
    缓存 函数 实时
  • 深入浅出ASP数据缓存:剖析其工作原理和应用技巧
    ASP数据缓存是一种内置于ASP.NET平台中的高速、高性能的缓存机制,用于存储并快速检索应用程序中经常访问的数据。通过缓存数据,ASP.NET应用程序可以减少对数据库或其他数据源的访问次数,从而显著提升应用程序的性能。 一、ASP数据...
    99+
    2024-02-04
    ASP;数据缓存;性能优化;应用技巧
  • 如何在PHP中使用数据缓存函数
    在开发Web应用程序时,数据缓存是一项非常重要的技术。数据缓存可以大幅度提升Web应用程序的性能和响应速度,特别是当应用程序需要频繁地读取和写入数据库时。PHP是一种广泛使用的Web开发语言,它提供了许多数据缓存函数,使开发人员能够轻松地实...
    99+
    2023-05-18
    函数 PHP 数据缓存
  • 浅析 Golang 函数的性能调优技巧
    在 go 中,函数性能调优技巧包括:减少内存分配:复用变量、使用缓冲池、使用固定大小数组。优化数据结构:使用切片代替数组、使用 map 代替 switch 语句、选择正确的容器。避免不必...
    99+
    2024-04-19
    性能调优 函数优化 golang 垃圾回收器 冒泡排序
  • python如何使用装饰器缓存函数调用
    这篇文章给大家分享的是有关python如何使用装饰器缓存函数调用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用装饰器缓存函数调用你是否曾经编写过一种函数,它执行昂贵的 I/O...
    99+
    2024-04-02
  • C++浅析数据在内存中如何存储
    目录一、数据类型二、原码反码补码三、大小端整型提升一、数据类型 数据类型有7种:    char         ...
    99+
    2022-11-13
    C++数据存储 C++数据在内存中存储
  • golang函数缓存性能优化技巧分享
    函数缓存是一种性能优化技术,可存储函数调用结果以进行重复使用,避免重复计算。在 go 中,可以通过使用 map 或 sync.map 实现函数缓存,并根据特定场景采用不同的缓存策略。例如...
    99+
    2024-05-01
    golang 缓存优化
  • Vue中组件如何缓存
    这篇文章给大家分享的是有关Vue中组件如何缓存的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近项目中需要实现一个保留上一次Tab 页的功能。如下图,当我选择 B 组件时,我希望...
    99+
    2024-04-02
  • 如何实现JavaScript函数式的浅析
    这篇文章给大家介绍如何实现JavaScript函数式的浅析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JS函数式浅析0x00 入门的导语(废话)最近两年你要说函数式编程不火...
    99+
    2024-04-02
  • vue如何使用keep-alive缓存页面
    这篇文章主要介绍vue如何使用keep-alive缓存页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!keep-alive缓存页面比如在表单输入页面进入下一步后,再返回上一步到表单页时要保留表单输入的内容、比如在列...
    99+
    2023-06-26
  • 如何使用php函数来优化缓存机制?
    引言:在开发网站时,为了提高性能和访问速度,缓存机制是非常重要的。PHP内置了一些函数和扩展来帮助我们实现缓存功能。本文将介绍如何使用PHP函数来优化缓存机制,并提供具体的代码示例。一、了解缓存机制在开始优化缓存机制之前,首先需要了解缓存的...
    99+
    2023-10-21
    缓存 优化 PHP函数
  • 如何使用Vue进行数据传递(方法浅析)
    Vue是一个流行的JavaScript框架,它可以帮助我们构建高效的用户界面。在Vue中,有多种方法可以进行数据传递,这些方法可以应用于单个组件或整个Vue实例。本文将介绍如何使用Vue进行数据传递。PropsProps是Vue提供的一种属...
    99+
    2023-05-14
  • 如何使用PHP缓存函数实现实时更新?
    在现代Web开发中,缓存是一个非常重要的概念。缓存可以帮助我们减少服务器的负担,提高网站的访问速度。在PHP中,有很多缓存函数可以帮助我们实现这个目标。在本文中,我们将介绍如何使用PHP缓存函数实现实时更新。 一、什么是缓存? 在计算机领...
    99+
    2023-08-11
    缓存 函数 实时
  • 如何使用缓存机制提升 PHP 函数性能?
    通过缓存函数结果,php 可以显著提高性能。在 php.ini 中启用 opcode 缓存,并将脚本每个小时重新缓存一次:opcache.revalidate_freq=1。此外,可以使...
    99+
    2024-04-24
    php 缓存机制
  • vue如何使用keep-alive后清除缓存
    小编给大家分享一下vue如何使用keep-alive后清除缓存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是keepalive在平常开发中,有部分组件没有必...
    99+
    2023-06-20
  • golang函数并发缓存的锁粒度优化技巧
    优化 go 并发缓存性能的锁粒度技巧:全局锁:简单实现,锁粒度过大,会产生不必要的竞争。键级锁:锁粒度细化到每个键,但会引入大量锁并增加开销。分片锁:将缓存划分为多个分片,每个分片有单独...
    99+
    2024-05-05
    并发缓存 锁粒度 golang 并发访问
  • Vue如何在CSS中使用data定义的数据浅析
    1、考虑一个问题, 后端传来一个数据, 比如是某个百分比, 需要在页面做进度展示. 一般的情况都会在 CSS 中设置数据展示, 但是 CSS 中如何获取到后端传来的数据呢 2、使用自...
    99+
    2024-04-02
  • Java缓存文件技巧:如何处理大量数据?
    Java 作为一种广泛使用的编程语言,有着广泛的应用场景,其中最常见的就是处理大量数据。但是,处理大量数据时,常常会出现内存不足的问题,这时候,缓存文件就成为了一个很好的解决方案。 本文将介绍 Java 中缓存文件的技巧,以及如何处理大量...
    99+
    2023-10-06
    缓存 文件 关键字
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作