使用快取計算來提高應用程式效能
阿新 • • 發佈:2018-12-21
問題:
如何減少重複複雜的和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>
利用中間值來進行快取,可有效節省時間。