對象LruCache
LruCache(Least Recently Used Cache) 是用來維護LRU快取的類別。它可以儲存一定數量的值,並且保持了容器的尺寸。當新資料進來時,如果容器還沒有到達尺寸限制,新資料可以直接加入容器。如果容器已滿,則容器將淘汰最近最少使用的數據
我們可以透過以下方式來使用:
1
2const util = require('util')
const c = new util.LruCache(10, 100) // create a LruCache instance with size 10 and timeout 100ms
其中,set() 是設定鍵值對的介面:
1LruCache.set(String name, Value value);
name 參數指定要設定的鍵值,value 參數指定要設定的值。
LruCache
的get
方法可以用回呼函數的方式更新快取資料:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15var c = new util.LruCache(10, 1000); // create a LruCache instance with size 10 and timeout 1000ms
function get_data(name) {
// return data from backend
// ...
var data = {
'name': name,
'value': Math.random()
};
console.log('update data: ' + JSON.stringify(data)); // output infomation to console
return data;
}
console.log(c.get('a', get_data));
console.log(c.get('a', get_data));
執行結果:
1
2
3update data: {"name":"a","value":0.4019124971556616}
{"name":"a","value":0.4019124971556616} // updater will be called to update cache data when cache is empty
{"name":"a","value":0.4019124971556616} // updater will not be called when cache is not empty
具體使用LruCache 時,建議開發人員遵循以下的最佳實務:
- 可以在後端資料處理過程中,以某個特定時間點為新點,設定失效時間,來使用LruCache 最佳化應用效能。
- 在對應的場景下分析業務決策。例如更頻傳的資料更新,需要配置較短的失效時間,而更新頻率較低的快取資料則不需要設定太短的失效時間。
- 在不同使用情境中,考慮不同資料存取模式,使用適當的LruCache 類別實例。
繼承關係
建構函數
LruCache
LruCache 物件建構函數
1
2new LruCache(Integer size,
Integer timeout = 0);
呼叫參數:
- size: Integer, 快取最大尺寸
- timeout: Integer, 元素失效時間,單位是ms,小於等於0 不失效,預設為 0
靜態屬性
defaultMaxListeners
Integer, 預設全域最大監聽器數
1static Integer LruCache.defaultMaxListeners;
成員屬性
size
Integer, 查詢容器內數值個數
1readonly Integer LruCache.size;
timeout
Integer, 查詢並設定容器內元素失效時間,單位是ms,小於等於0 不失效
1Integer LruCache.timeout;
onexpire
Function, 查詢與綁定資料逾時事件,相當於on("expire", func);
1Function LruCache.onexpire;
成員函數
clear
清除容器數據
1LruCache.clear();
has
檢查容器內是否存在指定鍵值的數據
1Boolean LruCache.has(String name);
呼叫參數:
- name: String, 指定要檢查的鍵值
回傳結果:
- Boolean, 返回鍵值是否存在
get
查詢指定鍵值的值
1Value LruCache.get(String name);
呼叫參數:
- name: String, 指定要查詢的鍵值
回傳結果:
- Value, 傳回鍵值所對應的值,若不存在,則傳回undefined
查詢指定鍵值的值,若不存在或過期,則呼叫回呼函數更新數據
1
2Value LruCache.get(String name,
Function updater);
呼叫參數:
- name: String, 指定要查詢的鍵值
- updater: Function, 指定更新函數
回傳結果:
- Value, 傳回鍵值所對應的值
set
設定一個鍵值數據,鍵值不存在則插入一條新數據
1
2LruCache.set(String name,
Value value);
呼叫參數:
- name: String, 指定要設定的鍵值
- value: Value, 指定要設定的數據
設定一個鍵值數據,鍵值不存在則插入新數據
1LruCache.set(Object map);
呼叫參數:
- map: Object, 指定要設定的鍵值資料字典
remove
刪除指定鍵值的全部值
1LruCache.remove(String name);
呼叫參數:
- name: String, 指定要刪除的鍵值
isEmpty
檢查容器是否為空
1Boolean LruCache.isEmpty();
回傳結果:
- Boolean, 容器內無數值則回傳true
on
綁定一個事件處理函數到對象
1
2Object LruCache.on(String ev,
Function func);
呼叫參數:
- ev: String, 指定事件的名稱
- func: Function, 指定事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
綁定一個事件處理函數到對象
1Object LruCache.on(Object map);
呼叫參數:
- map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
addListener
綁定一個事件處理函數到對象
1
2Object LruCache.addListener(String ev,
Function func);
呼叫參數:
- ev: String, 指定事件的名稱
- func: Function, 指定事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
綁定一個事件處理函數到對象
1Object LruCache.addListener(Object map);
呼叫參數:
- map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
prependListener
綁定一個事件處理函數到物件起始
1
2Object LruCache.prependListener(String ev,
Function func);
呼叫參數:
- ev: String, 指定事件的名稱
- func: Function, 指定事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
綁定一個事件處理函數到物件起始
1Object LruCache.prependListener(Object map);
呼叫參數:
- map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
once
綁定一個一次性事件處理函數到對象,一次性處理函數只會觸發一次
1
2Object LruCache.once(String ev,
Function func);
呼叫參數:
- ev: String, 指定事件的名稱
- func: Function, 指定事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
綁定一個一次性事件處理函數到對象,一次性處理函數只會觸發一次
1Object LruCache.once(Object map);
呼叫參數:
- map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
prependOnceListener
綁定一個事件處理函數到物件起始
1
2Object LruCache.prependOnceListener(String ev,
Function func);
呼叫參數:
- ev: String, 指定事件的名稱
- func: Function, 指定事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
綁定一個事件處理函數到物件起始
1Object LruCache.prependOnceListener(Object map);
呼叫參數:
- map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
off
從物件處理佇列中取消指定函數
1
2Object LruCache.off(String ev,
Function func);
呼叫參數:
- ev: String, 指定事件的名稱
- func: Function, 指定事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
取消物件處理佇列中的全部函數
1Object LruCache.off(String ev);
呼叫參數:
- ev: String, 指定事件的名稱
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
從物件處理佇列中取消指定函數
1Object LruCache.off(Object map);
呼叫參數:
- map: Object, 指定事件映射關係,物件屬性名稱作為事件名稱,屬性的值作為事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
removeListener
從物件處理佇列中取消指定函數
1
2Object LruCache.removeListener(String ev,
Function func);
呼叫參數:
- ev: String, 指定事件的名稱
- func: Function, 指定事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
取消物件處理佇列中的全部函數
1Object LruCache.removeListener(String ev);
呼叫參數:
- ev: String, 指定事件的名稱
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
從物件處理佇列中取消指定函數
1Object LruCache.removeListener(Object map);
呼叫參數:
- map: Object, 指定事件映射關係,物件屬性名稱作為事件名稱,屬性的值作為事件處理函數
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
removeAllListeners
從物件處理佇列中取消所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器。
1Object LruCache.removeAllListeners(String ev);
呼叫參數:
- ev: String, 指定事件的名稱
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
從物件處理佇列中取消所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器。
1Object LruCache.removeAllListeners(Array evs = []);
呼叫參數:
- evs: Array, 指定事件的名稱
回傳結果:
- Object, 傳回事件物件本身,便於鍊式調用
setMaxListeners
監聽器的預設限制的數量,僅用於相容
1LruCache.setMaxListeners(Integer n);
呼叫參數:
- n: Integer, 指定事件的數量
getMaxListeners
取得監聽器的預設限制的數量,僅用於相容
1Integer LruCache.getMaxListeners();
回傳結果:
- Integer, 回傳預設限制數量
listeners
查詢物件指定事件的監聽器陣列
1Array LruCache.listeners(String ev);
呼叫參數:
- ev: String, 指定事件的名稱
回傳結果:
- Array, 傳回指定事件的監聽器數組
listenerCount
查詢物件指定事件的監聽器數量
1Integer LruCache.listenerCount(String ev);
呼叫參數:
- ev: String, 指定事件的名稱
回傳結果:
- Integer, 傳回指定事件的監聽器數量
查詢物件指定事件的監聽器數量
1
2Integer LruCache.listenerCount(Value o,
String ev);
呼叫參數:
- o: Value, 指定查詢的對象
- ev: String, 指定事件的名稱
回傳結果:
- Integer, 傳回指定事件的監聽器數量
eventNames
查詢監聽器事件名稱
1Array LruCache.eventNames();
回傳結果:
- Array, 傳回事件名稱數組
emit
主動觸發一個事件
1
2Boolean LruCache.emit(String ev,
...args);
呼叫參數:
- ev: String, 事件名稱
- args: ..., 事件參數,將會傳遞給事件處理函數
回傳結果:
- Boolean, 回傳事件觸發狀態,有回應事件回傳true,否則回傳false
toString
傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現
1String LruCache.toString();
回傳結果:
- String, 傳回物件的字串表示
toJSON
傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合
1Value LruCache.toJSON(String key = "");
呼叫參數:
- key: String, 未使用
回傳結果:
- Value, 傳回包含可JSON 序列化的值