关于《高性能JavaScript》制表(Memoization)笔记
减少工作量是最好的性能优化技术。代码所做的事情越少,他的速度就越快。
书中在关于用制表优化递归的下一段代码中,存在问题。
function memfactorial(n){
if (!memfactorial.cache){
memfactorial.cache = {
"0": 1,
"1": 1
};
}
if (!memfactorial.cache.hasOwnProperty(n)){
memfactorial.cache[n] = n * memfactorial (n-1);
}
return memfactorial.cache[n];
}
下划线部分这种写法并没有真正解决递归的问题。当首次n过大时,本质上依然是一个递归。
只适用于从小到大的逐步调用。
例如:
// 堆栈溢出
alert(memfactorial(4375));
// 正常
alert(memfactorial(3750) + memfactorial(4375));