问题:
如何减少重复复杂的和CPU消耗大的计算的需要,优化js应用程序和库。
解决方案
使用中间函数memoization来缓存复杂计算的结果。
举例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script>
function fibonacci() {
var memo = [0, 1];
var fib = function (n) {
//用来存储中间值
var result = memo[n];
if (typeof result != "number") {
result = fib(n - 1) + fib(n - 2);
memo[n] = result;
}
return result;
};
return fib;
}
function nonfibonacci(n) {
return n < 2 ? n : nonfibonacci(n - 1) + nonfibonacci(n - 2);
}
//#region 设置中间值
//开始时间
console.time("withMemoTime");
for (var i = 0; i < 40; i++) {
console.log(i + ":" + fibonacci()(i));
}
console.timeEnd("withMemoTime")
//结束时间
//#endregion
//#refion 不设置
console.time("nonMemoTime");
for (var i = 0; i < 40; i++) {
console.log(i + ":" + nonfibonacci(i));
}
console.timeEnd("nonMemoTime")
//#endregion
</script>
</body>
</html>
利用中间值来进行缓存,可有效节省时间。