Memoize
Memoize
memoize 是一种缓存JavaScript函数结果来加速代码速度的技术,同cache类似,但不相同,cache可以是任何缓存技术,比如http缓存,数据库缓存等,但memoize只是在JavaScript中缓存返回值。
什么时候适用
-
用于一个高强度运算的函数上,相同参数返回的结果不会变化
-
占用内存比运算内存划得来,适用频率高
怎么使用
当一个函数运算耗费非常昂贵的计算资源时,而且会重复调用的,考虑使用memoize是非常不错的提升性能的方法。
const add = function(n) {
for(var i = 0;i < 10000000000;i++) {
n++;
}
return n;
};
const memoizedMethod = function(method) {
let memoizes = [];
return function(n) {
if(n in memoizes) {
return memoizes[n];
} else {
memoizes[n] = method(n);
return memoizes[n];
}
}
}
var addMemoized = memoizedMethod(add);
addMemoized(2); //时间较长
addMemoized(2); //立即获取结果
addMemoized(2); //立即获取结果
实现方法
把函数的参数和值缓存到对象中,在调用函数前前判断缓存中是否存在结果,如果没有,就执行函数。但是如果缓存中存在结果,立即返回结果,节省了大量的计算资源。
关于react有一个装饰器,可以非常方便的使用他提供的一些现成的方法,其中包括了memoize的实现
点此传送→lodash-decorators
react hook中也提供了一个useMemo用于实现memoize 点此传送→useMemo