Object 內建對象

對象LruCache

LruCache(Least Recently Used Cache) 是用來維護LRU快取的類別。它可以儲存一定數量的值,並且保持了容器的尺寸。當新資料進來時,如果容器還沒有到達尺寸限制,新資料可以直接加入容器。如果容器已滿,則容器將淘汰最近最少使用的數據

我們可以透過以下方式來使用:

1 2
const util = require('util') const c = new util.LruCache(10, 100) // create a LruCache instance with size 10 and timeout 100ms

其中,set() 是設定鍵值對的介面:

1
LruCache.set(String name, Value value);

name 參數指定要設定的鍵值,value 參數指定要設定的值。

LruCacheget方法可以用回呼函數的方式更新快取資料:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var 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 3
update 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 2
new LruCache(Integer size, Integer timeout = 0);

呼叫參數:

  • size: Integer, 快取最大尺寸
  • timeout: Integer, 元素失效時間,單位是ms,小於等於0 不失效,預設為 0

靜態屬性

defaultMaxListeners

Integer, 預設全域最大監聽器數

1
static Integer LruCache.defaultMaxListeners;

成員屬性

size

Integer, 查詢容器內數值個數

1
readonly Integer LruCache.size;

timeout

Integer, 查詢並設定容器內元素失效時間,單位是ms,小於等於0 不失效

1
Integer LruCache.timeout;

onexpire

Function, 查詢與綁定資料逾時事件,相當於on("expire", func);

1
Function LruCache.onexpire;

成員函數

clear

清除容器數據

1
LruCache.clear();

has

檢查容器內是否存在指定鍵值的數據

1
Boolean LruCache.has(String name);

呼叫參數:

  • name: String, 指定要檢查的鍵值

回傳結果:

  • Boolean, 返回鍵值是否存在

get

查詢指定鍵值的值

1
Value LruCache.get(String name);

呼叫參數:

  • name: String, 指定要查詢的鍵值

回傳結果:

  • Value, 傳回鍵值所對應的值,若不存在,則傳回undefined

查詢指定鍵值的值,若不存在或過期,則呼叫回呼函數更新數據

1 2
Value LruCache.get(String name, Function updater);

呼叫參數:

  • name: String, 指定要查詢的鍵值
  • updater: Function, 指定更新函數

回傳結果:

  • Value, 傳回鍵值所對應的值

set

設定一個鍵值數據,鍵值不存在則插入一條新數據

1 2
LruCache.set(String name, Value value);

呼叫參數:

  • name: String, 指定要設定的鍵值
  • value: Value, 指定要設定的數據

設定一個鍵值數據,鍵值不存在則插入新數據

1
LruCache.set(Object map);

呼叫參數:

  • map: Object, 指定要設定的鍵值資料字典

remove

刪除指定鍵值的全部值

1
LruCache.remove(String name);

呼叫參數:

  • name: String, 指定要刪除的鍵值

isEmpty

檢查容器是否為空

1
Boolean LruCache.isEmpty();

回傳結果:

  • Boolean, 容器內無數值則回傳true

on

綁定一個事件處理函數到對象

1 2
Object LruCache.on(String ev, Function func);

呼叫參數:

  • ev: String, 指定事件的名稱
  • func: Function, 指定事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

綁定一個事件處理函數到對象

1
Object LruCache.on(Object map);

呼叫參數:

  • map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

addListener

綁定一個事件處理函數到對象

1 2
Object LruCache.addListener(String ev, Function func);

呼叫參數:

  • ev: String, 指定事件的名稱
  • func: Function, 指定事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

綁定一個事件處理函數到對象

1
Object LruCache.addListener(Object map);

呼叫參數:

  • map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

prependListener

綁定一個事件處理函數到物件起始

1 2
Object LruCache.prependListener(String ev, Function func);

呼叫參數:

  • ev: String, 指定事件的名稱
  • func: Function, 指定事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

綁定一個事件處理函數到物件起始

1
Object LruCache.prependListener(Object map);

呼叫參數:

  • map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

once

綁定一個一次性事件處理函數到對象,一次性處理函數只會觸發一次

1 2
Object LruCache.once(String ev, Function func);

呼叫參數:

  • ev: String, 指定事件的名稱
  • func: Function, 指定事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

綁定一個一次性事件處理函數到對象,一次性處理函數只會觸發一次

1
Object LruCache.once(Object map);

呼叫參數:

  • map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

prependOnceListener

綁定一個事件處理函數到物件起始

1 2
Object LruCache.prependOnceListener(String ev, Function func);

呼叫參數:

  • ev: String, 指定事件的名稱
  • func: Function, 指定事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

綁定一個事件處理函數到物件起始

1
Object LruCache.prependOnceListener(Object map);

呼叫參數:

  • map: Object, 指定事件映射關係,物件屬性名稱將作為事件名稱,屬性的值將作為事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

off

從物件處理佇列中取消指定函數

1 2
Object LruCache.off(String ev, Function func);

呼叫參數:

  • ev: String, 指定事件的名稱
  • func: Function, 指定事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

取消物件處理佇列中的全部函數

1
Object LruCache.off(String ev);

呼叫參數:

  • ev: String, 指定事件的名稱

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

從物件處理佇列中取消指定函數

1
Object LruCache.off(Object map);

呼叫參數:

  • map: Object, 指定事件映射關係,物件屬性名稱作為事件名稱,屬性的值作為事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

removeListener

從物件處理佇列中取消指定函數

1 2
Object LruCache.removeListener(String ev, Function func);

呼叫參數:

  • ev: String, 指定事件的名稱
  • func: Function, 指定事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

取消物件處理佇列中的全部函數

1
Object LruCache.removeListener(String ev);

呼叫參數:

  • ev: String, 指定事件的名稱

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

從物件處理佇列中取消指定函數

1
Object LruCache.removeListener(Object map);

呼叫參數:

  • map: Object, 指定事件映射關係,物件屬性名稱作為事件名稱,屬性的值作為事件處理函數

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

removeAllListeners

從物件處理佇列中取消所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器。

1
Object LruCache.removeAllListeners(String ev);

呼叫參數:

  • ev: String, 指定事件的名稱

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

從物件處理佇列中取消所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器。

1
Object LruCache.removeAllListeners(Array evs = []);

呼叫參數:

  • evs: Array, 指定事件的名稱

回傳結果:

  • Object, 傳回事件物件本身,便於鍊式調用

setMaxListeners

監聽器的預設限制的數量,僅用於相容

1
LruCache.setMaxListeners(Integer n);

呼叫參數:

  • n: Integer, 指定事件的數量

getMaxListeners

取得監聽器的預設限制的數量,僅用於相容

1
Integer LruCache.getMaxListeners();

回傳結果:

  • Integer, 回傳預設限制數量

listeners

查詢物件指定事件的監聽器陣列

1
Array LruCache.listeners(String ev);

呼叫參數:

  • ev: String, 指定事件的名稱

回傳結果:

  • Array, 傳回指定事件的監聽器數組

listenerCount

查詢物件指定事件的監聽器數量

1
Integer LruCache.listenerCount(String ev);

呼叫參數:

  • ev: String, 指定事件的名稱

回傳結果:

  • Integer, 傳回指定事件的監聽器數量

查詢物件指定事件的監聽器數量

1 2
Integer LruCache.listenerCount(Value o, String ev);

呼叫參數:

  • o: Value, 指定查詢的對象
  • ev: String, 指定事件的名稱

回傳結果:

  • Integer, 傳回指定事件的監聽器數量

eventNames

查詢監聽器事件名稱

1
Array LruCache.eventNames();

回傳結果:

  • Array, 傳回事件名稱數組

emit

主動觸發一個事件

1 2
Boolean LruCache.emit(String ev, ...args);

呼叫參數:

  • ev: String, 事件名稱
  • args: ..., 事件參數,將會傳遞給事件處理函數

回傳結果:

  • Boolean, 回傳事件觸發狀態,有回應事件回傳true,否則回傳false

toString

傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現

1
String LruCache.toString();

回傳結果:

  • String, 傳回物件的字串表示

toJSON

傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合

1
Value LruCache.toJSON(String key = "");

呼叫參數:

  • key: String, 未使用

回傳結果:

  • Value, 傳回包含可JSON 序列化的值