缓存计算结果能显著提速,因其将重复耗时操作转为毫秒级响应;通过对象字面量、map或记忆化函数实现,需确保输入纯函数性、键唯一性及内存可控性。

合理缓存计算结果是 JavaScript 性能优化中最直接、见效最快的方式之一。它不依赖网络或硬件,只靠逻辑设计就能把重复耗时操作变成毫秒级响应。
为什么缓存计算结果能提速
很多函数反复执行相同输入却得到相同输出,比如格式化日期、解析 URL 参数、递归计算斐波那契数列。每次调用都重跑逻辑,既浪费 CPU,又拖慢交互。缓存把这些“确定性结果”记下来,下次遇到同样输入,直接返回,跳过全部运算过程。
内存缓存的三种常用实现方式
缓存不是简单存个变量,得考虑键值匹配、类型兼容和内存可控性:
-
对象字面量缓存:适合参数简单(如字符串、数字)且数量有限的场景
例如:const cache = {};,用cache[key] = result存取;但要注意key必须是字符串,对象或数组需先JSON.stringify序列化 -
Map 缓存:支持任意类型作 key(包括对象、函数),查找更快,更适合作为通用缓存容器
例如:const cache = new Map(); cache.set(obj, result); -
记忆化函数(memoize)封装:把缓存逻辑抽成高阶函数,复用性强
可自动处理参数序列化、命中判断、结果存储,一行就能包装原有函数
关键细节决定缓存是否真正有效
缓存用不好,反而带来隐患或无效:
- 避免在循环或高频回调里新建缓存对象——应提至外层作用域,保持单例
- 注意参数顺序和类型一致性:
fib(5)和fib("5")在JSON.stringify下结果不同,可能被当成两个 key - 对无界增长的缓存加限制,比如用 LRU 策略淘汰旧项,防止内存泄漏
- 有副作用或依赖外部状态的函数(如读取时间、随机数、用户权限)不能缓存——结果不纯,缓存会出错
哪些计算值得缓存
不是所有函数都适合,优先缓存满足以下条件的:
- 执行耗时明显(如 >1ms),且调用频繁
- 输入参数稳定、可序列化,输出完全由输入决定(纯函数)
- 结果复用率高,比如表单校验规则、模板字符串拼接、树结构扁平化
- 替代方案成本高,比如用正则反复匹配同一段文本,不如缓存 RegExp 实例
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











