[英]Which one is better to define Enum by static Object or const string in Javascript
我正在做一個React-Native項目。 在項目中,我需要定義200-300枚舉。 我想像在Java中一樣使用Enum,也可以將Enum用作immutable.js Map / Set中的鍵。 這使我的代碼很容易編寫。 但是,我可以用字符串替換這些Enum對象。 現在我關心的是內存使用情況。 我不知道一個對象是否會消耗大量內存。 哪一個更好? 有什么建議嗎?
export class Enum {
static values() {
return Object.values(this).filter(value => value instanceof Enum);
}
static build() {
let count = 0;
for (const [key, value]: [string, any] of Object.entries(this)) {
if (value instanceof Enum) {
value._ordinal = count++;
value._name = key;
makeImmutable(value);
}
}
Object.freeze(this);
}
_ordinal: number;
_name: string;
name() {
return this._name;
}
ordinal() {
return this._ordinal;
}
toString() {
return JSON.stringify(this);
}
}
export class ReduxAction extends Enum {
static LOGIN = new ReduxAction();
static LOGOUT = new ReduxAction();
}
ReduxAction.build();
export function login() {
return {type: ReduxAction.LOGIN};
}
export class Game extends Enum {
static GAME_A = new Game('A', (data) => data.length);
static GAME_B = new Game('B', (data) => data.length * 2);
name: string;
countScore: Function;
constructor(name: string, countScore: Function) {
super();
this.name = name;
this.countScore = countScore;
}
}
V8開發人員在這里。 當然,對象比字符串大(特別是因為在您的情況下,無論如何您都擁有字符串,而問題是您是否還擁有對象)。 對於代碼段中的代碼, Enum
每個實例都應為5個指針大(對象標頭為3個指針, _ordinal
和_name
屬性為2個指針;因此在64位平台上,對象大小為5 * 8b = 40字節)。 程序中每個“對象形狀”也要花費一些內存,在這種情況下,這會轉化為“定義的每個類”。
考慮到您已經陳述的要求/目標,我想內存成本是可以接受的。 根據您代碼的結構方式,為了在這里切換到字符串,您還必須在其他地方使用更多的內存來維護相同的功能或接口。
附帶說明:所有反射功能往往會變慢。 例如,將“值”列表保留為數組並在請求時將其Object.values(this).filter(...instanceof...)
鏈要快得多。 但是,假設您說您正在為簡化編碼而進行優化,那么這可能是實現所需折衷的另一種可接受的成本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.