我最近正在研究一些JavaScript的設計模式和跨記憶化來了,而它看起來像一個很好的解決方案,以避免值我能看到的東西錯了,重新計算。比方說這個簡單的代碼,記憶化在Javascript
function square(num)
{
var result;
if(!square.cache[num]){
console.log("calculating a fresh value...");
result = num*num;
square.cache[num] = result;
}
return square.cache[num];
}
square.cache={}
調用console.log(square(20))
//打印出「計算一個新鮮參數...」,然後計算400,結果
我真正的問題是什麼情況時,在後續計算之後,高速緩存增長得如此之大,以至於需要更多時間從高速緩存中檢索結果,而不是計算新值。有沒有解決方案?
解決辦法是不使用記憶化。出於某種原因,使用它非常罕見。如果你的緩存可能是非常大的,它仍然是有意義的使用緩存,使用適當的一個(例如LRU緩存) –
這是一個相當簡單的程序,你可以直接做計算。我會說你在這裏濫用記憶化技術;) – thefourtheye
洛爾@thefourtheye,這只是我的好奇心一個簡單的例子。我在我的項目中應用這個更復雜更廣泛的場景。 – shanks