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

时间:2012-07-10 21:52:17

标签: javascript

我想将Snippet 1重构为Snippet 2.考虑到大小,我不认为性能是一个很大的问题,但我想了解内存使用对于模块模式的重构有何影响

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

两个片段都经过测试,基本上可以正常使用。

Snippet 1 //替换SU / 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;
};

Snippet 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 个答案:

答案 0 :(得分:2)

有一些不同的东西。 Snippet 2基本上是创建一个单例。片段1可以看作是一个类'。您可以创建' SUniversals'的多个实例/对象。并与他们做不同的事情。

实际上,代码段1在内存方面更有效。通过添加到对象的原型,无论您创建的对象数量多少,您基本上只能拥有每个函数的1个副本。模块模式将创建单独的实体。

答案 1 :(得分:1)

不足以担心; - )

说真的,你唯一需要担心的是模块模式是造成内存泄漏;模式本身基本上没用。