cached_value 是一個輕量級的 Flutter/Dart 套件,提供了一種簡單的方式來快取由耗時運算產生的值。它確保一旦值被計算,就會被儲存並重複使用,而不需重新計算,從而提升效能並減少延遲。該套件支援非同步操作,並可設定過期時間自動處理快取。適用於 API 回應、複雜運算或資料解析等情境,避免重複計算。
適用情境
快取 API 回應
儲存計算結果
減少重複資料處理
提升應用程式的回應速度
管理昂貴的初始化任務
保留暫時狀態
主要特色
簡單的非同步快取
可設定的過期時間
到期後自動重新計算
支援空安全值
輕量且依賴極少
跨平台相容性
適合對象
尋求簡單快取的開發者
頻繁進行昂貴計算的應用程式
效能優化專案
帶有快取資料的狀態管理
快速快取解決方案原型設計
使用建議
不適用於大型資料集
沒有內建的跨應用重啟持久化
在某些情況下需要手動清除快取
限制為記憶體儲存
最適合短暫快取的值
不支援複雜的快取策略
原始 README
以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。
cached_value
A simple way to cache values that result from rather expensive operations.
It is useful to cache values that:
Are computed from other values in a consistent way;
Can be changed given known and unknown conditions;
Should not be computed on every access (like a getter);
A cached_value is better used over imperative APIs, such as Flutter's render objects. See Motivation for more.
Installation
Add to pubspec.yaml:
dartpubaddcached_value
Usage
A cache can start as a simple manually controlled cache and then be enhanced with automatic functionalities such as dependencies and time-to-live (TTL).
1.Creating a simple cached that is invaldiated manually
intfactorial(int n) {
if (n < 0) throw ('Negative numbers are not allowed.');
return n <= 1 ? 1 : n * factorial(n - 1);
}
int originalValue = 1;
final factorialCache = CachedValue(() => factorial(originalValue));
print(factorialCache.value); // 1
originalValue = 6;
print(factorialCache.value); // 1print(factorialCache.isValid) // true, invalid only when invalidate is called// mark as invalid
factorialCache.invalidate();
print(factorialCache.isValid); // falseprint(factorialCache.value); // 720print(factorialCache.isValid); // true
Accessing value when the cache is invalid refreshes the cache. It can be refreshed manually via
the refresh method:
Some imperative APIs such as the canvas paint on Flutter render objects of Flame's components may
benefit from values that can be stored and reused between more than a single frame (or paint).
In some very specific cases, I found very convenient to store some objects across frames, like
Paint and TextPainter instances.