关于Javascript模块声明:Javascript模块声明 – 性能

Javascript Module declaration - performance

我试图在以下两种编写JS模块的方法之间做出决定。在内存和CPU上写一个模块意味着什么?第二个会占用更多的浏览器内存吗?

使用函数声明

1
2
3
4
5
6
function MyModule () {
    this.getOperation1 =  operation1;
    function operation1() {
        return"XYZ"
    }
}

使用变量定义

1
2
3
4
5
 var MyModule = {
     getOperation1: function() {
        return"XYZ"
     }
  }


有关与内存相关的参数,请参阅此yui博客

从同一

By using new to invoke the function, the object holds onto a worthless
prototype object. That wastes memory with no offsetting advantage. If
we do not use the new, we don’t keep the wasted prototype object in
the chain

正如@alnitak所提到的,如果您要实现constructor函数,那么就使用prototype对象,以便所有实例共享同一对象。

要检查CPU方面的[speed],请使用www.jsferf.com并进行性能测试。一些已经可用的测试函数调用,object.create与new,通用的


内存方面,它们差不多是一样的——都创建了一个对象。

然而:

  • 您只能将new与基于函数的模块格式一起使用。后者只创建一个对象,而不是可用于创建其他实例的构造函数。

  • 通过函数,您可以将私有局部变量包含在范围中。

  • 然而,在大多数情况下,更好的方法是:

    1
    2
    3
    4
    5
    6
    function MyModule () {
    }

    MyModule.prototype.getOperation1 = function() {
        ...
    }

    这样可以确保如果创建多个实例,它们都只共享getOperation1函数的一个副本。

    也就是说,如果您所要做的只是为函数命名,而它们并不是自然形成一个"对象"(在OOP意义上),那么您也可以使用对象文本语法。