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

How much memory is allocated when using the Module Pattern?

本文关键字:多少 内存 分配 模块 模式      更新时间:2023-09-26

我想将代码段1重构为代码段2。考虑到大小,我不认为性能是一个很大的问题,但我想了解关于模块模式的重构,内存使用情况如何。

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

这两个片段都经过了测试,基本上都能工作。

代码段1//用SU 替换SUniversals

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更高效。通过添加到对象的原型中,无论创建的对象数量如何,每个函数基本上只有一个副本。模块模式将创建单独的实体。

不用担心;-)

说真的,模块模式唯一需要担心的就是内存泄漏;该模式本身基本上不使用任何东西。