值得一看
广告
彩虹云商城
广告

热门广告位

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

函数缓存通过存储已计算结果避免重复运算,提升性能。使用闭包与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)); // 直接从缓存读取

缓存键的处理注意事项

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

即构数智人

即构数智人

即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。

即构数智人
36

查看详情
即构数智人

  • 参数顺序和类型必须一致:[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));

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

相关标签:

javascript java js json app 递归函数 常见问题 JavaScript json Object if for const 递归 循环 数据结构 闭包 map JS console undefined function 对象 this promise 异步 性能优化

大家都在看:

js脚本如何制作页面元素逐个显示效果_js逐个显示动画脚本编写
JS注解怎么进行代码提示_ JS注解配合IDE实现智能提示的方法
js中jquery框架怎么写
JS事件监听怎么绑定_JS事件监听addEventListener方法使用教程
js中join()方法的使用
温馨提示: 本文最后更新于2025-11-05 10:41:09,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容