Javascript 模块声明 - 性能

Javascript Module declaration - performance

本文关键字:性能 声明 模块 Javascript      更新时间:2023-09-26

我正在尝试在以下编写JS模块的方式之间做出决定。在内存和 CPU 上编写模块的含义是什么?第二个会在浏览器中占用更多内存吗?

使用函数声明

function MyModule () {
    this.getOperation1 =  operation1;
    function operation1() {
        return "XYZ"
    }
}

使用变量定义

 var MyModule = {
     getOperation1: function() {
        return "XYZ"
     }
  }

内存方面,它们大致相同 - 两者都创建一个对象。

然而:

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

  2. 使用函数,您可以将私有局部变量包含在作用域中。

但是,在大多数情况下,更好的方法是:

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

这可确保在创建多个实例时,它们都仅共享 getOperation1 函数的一个副本。

也就是说,如果您尝试做的只是为函数命名,并且它们不会自然地形成"对象"(在 OOP 意义上(,那么您也可以使用对象文字语法。

参考这个 yui 博客以获取与内存相关的参数

从同一

通过使用 new 调用函数,对象保留了一个毫无价值的 原型对象。这会浪费内存,没有抵消优势。如果 我们不使用新的,我们不保留浪费的原型对象 链条

如@Alnitak所述,如果您准备实现constructor函数,请使用prototype对象,以便所有实例共享同一对象。

要检查 CPU 明智 [速度],请使用 www.jsperf.com 并进行性能测试。一些已经可用的测试函数调用,Object.create vs new ,通用