gpt4 book ai didi

Javascript 模块模式内存占用和性能

转载 作者:搜寻专家 更新时间:2023-11-01 04:19:38 24 4
gpt4 key购买 nike

我正在使用 Javascript 模块模式来尝试实现类似 C# 枚举的功能。我目前正在考虑通过两种方式来实现此功能,但我不了解一种方式与另一种方式相比的所有好处或优势。

这是实现 1:

var MyApp = (function (app) {

// Private Variable
var enums = {
ActionStatus: {
New: 1,
Open: 2,
Closed: 3
}
};

// Public Method
app.getEnum = function (path) {
var value = enums;
var properties = path.split('.');
for (var i = 0, len = properties.length; i < len; ++i) {
value = value[properties[i]];
}
return value;
};

return app;

})(MyApp || {});

// Example usage
var status = MyApp.getEnum("ActionStatus.Open");

现在实现 2:

var MyApp = (function (app) {

// Public Property
app.Enums = {
ActionStatus: {
New: 1,
Open: 2,
Closed: 3
}
};

return app;

})(MyApp || {});

// Example usage
var status = MyApp.Enums.ActionStatus.Open;

主要区别在于使用“私有(private)”变量与“公共(public)”属性来存储枚举。我认为实现 1 有点慢,但我不确定将枚举保持为“私有(private)”是否会减少内存使用量。谁能解释两者在内存占用和性能方面的差异(如果有的话)?任何其他建议/意见表示赞赏。

最佳答案

...but I was not sure if keeping the enums as "private" reduced the memory usage

相反,如果有的话:您仍然必须有枚举对象,并且您必须有一个函数来访问它。

就速度而言,我不担心。添加的函数调用不会产生任何真正的区别(我 looked into it 担心使用新的 forEach 等,甚至在 IE6 上大量慢的 JS 引擎,没关系)。

几年后,您可能会两全其美:只读的枚举,这要归功于 ECMAScript5 的 Object.defineProperties特点:

var Enums = Object.defineProperties({}, {
ActionStatus: {
value: Object.defineProperties({}, {
New: {value: 1},
Open: {value: 2},
Closed: {value: 3}
})
}
});

// Usage
var n = Enums.ActionStatus.New; // 1

默认情况下,使用 defineProperties 创建的属性是只读

事实上,如果您添加一个 ES5“垫片”以在 native 尚未拥有它的浏览器上创建 Object.defineProperties,您现在基本上可以拥有它。 “shimmed”版本会创建读写属性,因为只有本地支持的版本才能真正创建只读属性,但您现在可以编写代码并知道它可以在现代浏览器上按您喜欢的方式工作(大约一半所有网络冲浪者目前都拥有它们),同时仍在工作,只是不太健壮,在不太现代的网络上。

当然,EMCAScript6 可能会更进一步,但这仍然是 future 的事情。

关于Javascript 模块模式内存占用和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9418178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com