javascript - 使用模块模式时分配了多少内存?

标签 javascript

我想将 Snippet 1 重构为 Snippet 2。考虑到大小,我认为这里的性能不是一个大问题,但我想了解关于此模块模式重构的内存使用情况.

模块模式确保我只从 DOM 中提取一次数据,这正是我想要的,而且它还形成了一个迷你注册表模式,因为数据是私有(private)的。

这两个片段都已经过测试并且基本上可以工作。

片段 1//用 SU 替换 SUniverisals

var SUniversals = function () {
    // Pull from Server
    this.universals.path = document.getElementById('universals').getAttribute('data-path');
    this.universals.load = document.getElementById('universals').getAttribute('data-load');
    // Set Manually
    this.universals.debug = false;
};
SUniversals.prototype.universals = {};
SUniversals.prototype.get = function( key ) {
    return this.universals[ key ];
};
SUniversals.prototype.set = function( key, value ) {
    this.universals[ key ] = value;
};

片段 2

var SU = ( function () 
{
    // private SU.get('load');
    var universals = {};
        universals.path = document.getElementById('universals').getAttribute('data-path');
        universals.load = document.getElementById('universals').getAttribute('data-load');
        universals.debug = false;
    // pubulic
    var publik = {};
        publik.get = function( key )
        {
            return universals[ key ];
        };
        publik.set = function( key, value )
        {
            universals[ key ] = value;
        };
        return publik;
}());

最佳答案

几乎没有什么不同。片段 2 本质上是在创建一个单例。片段 1 可以看作是一个“类”。您可以创建“SUniversals”的多个实例/对象,并用它们做不同的事情。

实际上,片段 1 在内存方面效率更高。通过添加到对象的原型(prototype),无论您创建的对象数量如何,您基本上都只会拥有每个函数的 1 个副本。模块模式将创建单独的实体。

关于javascript - 使用模块模式时分配了多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422602/

相关文章:

javascript 函数在 cakephp 2 中无法正常工作

javascript按钮onClick不等待函数返回true并打开链接

javascript - jquery如何在模态中改变分页按钮的位置

javascript - nodejs与node冲突(重新安装nodejs)

javascript - 禁用 CKEditor 4.0 LITE 插件中的特定按钮以跟踪更改

javascript - this 变量是 Window 对象或在 Promise 的 then 方法中未定义

javascript - 在界面上显示从数据库获取的结果(JavaScript/HTML/SQLite)

javascript - 如何从选择器中排除具有属性的元素,无论其值如何

javascript - 使用 Promise 循环遍历 ajax 函数

javascript - 从嵌套对象字面量返回属性名称