0

0

JS函数怎样定义函数缓存_JS函数缓存定义与性能优化方法

星夢妙者

星夢妙者

发布时间:2025-11-05 10:34:02

|

581人浏览过

|

来源于php中文网

原创

函数缓存通过存储已计算结果避免重复运算,提升性能。使用闭包与Map缓存参数及结果,如memoize函数对expensiveCalc实现记忆化,减少递归或密集计算开销。

js函数怎样定义函数缓存_js函数缓存定义与性能优化方法

在JavaScript中,函数缓存(也称为记忆化,Memoization)是一种优化技术,通过缓存函数的执行结果,避免重复计算相同输入带来的性能开销。尤其适用于递归函数或计算密集型操作。下面介绍如何定义函数缓存以及常见的性能优化方法。

什么是函数缓存

函数缓存的核心思想是:当函数被调用时,先检查之前是否已经用相同的参数执行过。如果有,直接返回缓存的结果;如果没有,执行函数并将结果保存下来供后续使用。

这种机制特别适合纯函数——即相同输入始终返回相同输出、没有副作用的函数。

手动实现简单的缓存函数

可以通过闭包和Map或Object来存储缓存数据:

function memoize(fn) {
  const cache = new Map();
  return function(...args) {
    const key = JSON.stringify(args);
    if (cache.has(key)) {
      return cache.get(key);
    }
    const result = fn.apply(this, args);
    cache.set(key, result);
    return result;
  }
}

使用示例:

const expensiveCalc = (n) => {
  let sum = 0;
  for (let i = 0; i     sum += i;
  }
  return sum;
};

const cachedCalc = memoize(expensiveCalc);
console.log(cachedCalc(10)); // 第一次执行,耗时
console.log(cachedCalc(10)); // 直接从缓存读取

缓存键的处理注意事项

缓存的有效性依赖于参数的“唯一标识”。常见问题包括:

ONLYOFFICE
ONLYOFFICE

用ONLYOFFICE管理你的网络私人办公室

下载
  • 参数顺序和类型必须一致:[1] 和 ['1'] 应视为不同键
  • 对象和数组作为参数时需序列化:JSON.stringify 可能忽略 undefined、函数或循环引用
  • 函数上下文(this)影响结果时应纳入缓存键

进阶做法可以使用更健壮的键生成策略,例如自定义哈希函数或使用专门库如 fast-stable-stringify

性能优化建议

虽然缓存能提升性能,但不当使用反而造成内存泄漏或性能下降:

  • 限制缓存大小:使用 LRU(最近最少使用)缓存结构,如 lru-cache 库,防止无限增长
  • 选择合适的数据结构:频繁读写场景下,Map 比 Object 更高效
  • 避免缓存异步函数的Promise外壳:应缓存 resolved 后的结果,而非 Promise 对象本身
  • 慎用于高频小计算函数:缓存查找开销可能超过原函数执行时间

使用第三方库简化实现

实际项目中可使用成熟库减少出错:

  • lodash.memoize:提供基础缓存功能,支持自定义resolver
  • memoizerific:支持LRU限制
  • fast-memoize.js:高性能缓存方案

示例:

import memoize from 'lodash.memoize';

const memoizedFn = memoize((a, b) => a + b, (...args) => JSON.stringify(args));

基本上就这些。合理使用函数缓存能显著提升应用响应速度,关键是根据函数特性设计合适的缓存策略,平衡内存与性能。不复杂但容易忽略细节。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

419

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

778

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

539

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号