运用高阶组件结合代理模式中的缓存代理可以减少不必要的计算,举例我们经常使用到的加减乘除法。
// 加法运算
var plus = function(){
console.log('加法'); // TODO: 用于验证,记得删除
var a = 0;
for(var i = 0, l = arguments.length; i < l; i++){
a = a + arguments[i];
};
return a;
}
// 乘法运算
var mult = function(){
console.log('乘法'); // TODO: 用于验证,记得删除
var a = 1;
for(var i = 0, l = arguments.length; i < l; i++){
a = a * arguments[i];
};
return a;
}
// 缓存代理
var proxyFunc = function(fn){
var cache = {};
return function(){
var args = Array.prototype.join.call(arguments, ',');
if (args in cache){
return cache[args];
};
return cache[args] = fn.apply(this, arguments)
}
}
// 代码调用与验证
var proxyPlus = proxyFunc(plus), proxyMult = proxyFunc(mult);
console.log(proxyPlus(1, 2, 3, 4));
console.log(proxyPlus(1, 2, 3, 4));
console.log(proxyMult(1, 2, 3, 4));
console.log(proxyMult(1, 2, 3, 4));
运行以上代码,从控制台可以看到下图所示结果,其中‘加法’、‘乘法’只输出了一次,也就是只进行了一次计算,另一次则是从缓存代理直接返回结果,节省了没必要的计算。